All Projects → maxalmonte14 → magicproperties

maxalmonte14 / magicproperties

Licence: other
A little but powerful package that allows you call getters and setters implicitly in PHP.

Programming Languages

PHP
23972 projects - #3 most used programming language

Projects that are alternatives of or similar to magicproperties

python-autoclass
A python 3 library providing functions and decorators to automatically generate class code, such as constructor body or properties getters/setters along with optional support of validation contracts on the generated setters. Its objective is to reduce the amount of copy/paste code in your classes - and hence to help reducing human mistakes :).
Stars: ✭ 30 (+130.77%)
Mutual labels:  properties, setter, getter
laravel-cachable-attributes
Allows to cache attribute accessor values in an easy way.
Stars: ✭ 24 (+84.62%)
Mutual labels:  trait, accessor
swatch
A lightweight, modern theming library based on CSS variables and the setter/getter pattern.
Stars: ✭ 14 (+7.69%)
Mutual labels:  setter
PropertiesFile4Delphi
Library for managing configuration files with key-value syntax
Stars: ✭ 17 (+30.77%)
Mutual labels:  properties
sep-pay
Pay.ir Payment Package for Laravel 5.3+
Stars: ✭ 17 (+30.77%)
Mutual labels:  trait
laravel-make-extender
Generate and autoload custom Helpers, Builder Scope, Service class, Trait, Custom Casts, Collections Macros, View Composers
Stars: ✭ 30 (+130.77%)
Mutual labels:  trait
toolkit
some useful library of the php
Stars: ✭ 15 (+15.38%)
Mutual labels:  trait
object.omit
Return a copy of an object without the given keys.
Stars: ✭ 79 (+507.69%)
Mutual labels:  properties
props
config source library for golang, support properties/yaml/ini file、zookeeper\consul\etcd k/v k/props
Stars: ✭ 57 (+338.46%)
Mutual labels:  properties
cocktail
Traits, Talents & Annotations for NodeJS.
Stars: ✭ 65 (+400%)
Mutual labels:  properties
SemanticExtraSpecialProperties
Provides extra special properties to Semantic MediaWiki.
Stars: ✭ 24 (+84.62%)
Mutual labels:  properties
zipcode
ZipCode Cep do Brazil
Stars: ✭ 43 (+230.77%)
Mutual labels:  trait
awesome-landlord
A simple, single database multi-tenancy solution for Laravel 5.2+
Stars: ✭ 41 (+215.38%)
Mutual labels:  trait
Molecules Dataset Collection
Collection of data sets of molecules for a validation of properties inference
Stars: ✭ 69 (+430.77%)
Mutual labels:  properties
transfer
Converts from one encoding to another. Supported formats HCL ⇄ JSON ⇄ YAML⇄TOML⇄XML⇄plist⇄pickle⇄properties ...
Stars: ✭ 70 (+438.46%)
Mutual labels:  properties
daikon
Common modules shared by Talend applications
Stars: ✭ 14 (+7.69%)
Mutual labels:  properties
bety
Web-interface to the Biofuel Ecophysiological Traits and Yields Database (used by PEcAn and TERRA REF)
Stars: ✭ 14 (+7.69%)
Mutual labels:  trait
mutable
State containers with dirty checking and more
Stars: ✭ 32 (+146.15%)
Mutual labels:  properties
concurrent-resource
A header-only C++ library that allows easily creating thread-safe, concurrency friendly resources.
Stars: ✭ 17 (+30.77%)
Mutual labels:  accessor
versioning
Prevents update conflicts in Laravel
Stars: ✭ 35 (+169.23%)
Mutual labels:  trait

About MagicProperties

StyleCI Build Status Scrutinizer Code Quality Code Coverage Build Status

MagicProperties is a little but powerful package that allows you call getters and setters implicitly in all objects you want, something like C# properties or Laravel accessors and mutators (for Eloquent ORM).

Requirements

PHP >= 7.0

Installation

composer require "maxalmonte14/magicproperties"

Examples

Let's begin! with MagicProperties you can access to your getters and setters in a transparent way without exposing your business logic. First, use the traits in your class.

use MagicProperties\AutoAccessorTrait, AutoMutatorTrait;

class User {
    use AutoAccessorTrait, AutoMutatorTrait;

    private $username;
    private $token;
}

Note: The AutoAccessorTrait and AutoMutatorTrait use the __get and __set PHP magic methods, if you're using it in your class you gonna receive some error for sure, so don't do that!

Step two define your gettables and settables in the constructor.

public function __construct()
{
    $this->gettables = ['username'];
    $this->settables = ['username'];
}

Step three, define your own getters and setters for your gettables and settables.

public function getUsername()
{
    return strtolower($this->username);
}

public function setUsername($newUsername)
{
    $this->username = strtoupper($newUsername);
}

Note: You have to define your getters and setters following the convention "get + property name" and "set + property name", otherwise the property it's gonna set or get without calling any method. You can name your methods either camel case or snake case, anyway, it's gonna work!

The final step, enjoy calling your properties!

$user = new User();
$user->username = 'MaxAlmonte14'; // The value is set to MAXALMONTE14
echo $user->username; // Returns maxalmonte14

Note: Take care about this, the package doesn't make available all your private properties to the public context, only the properties defined in the gettables and settables array are gonna be accessible, so, if you try to access to a private non-gettable/settable property an exception is gonna be thrown.

echo $user->token; // An InvalidPropertyCallException is thrown!

Since version 2.0 your getters are called automatic even if you don't register your properties in the gettables array. The following example should work as expected.

public function __construct()
{
    $this->settables = ['username'];
}

public function getUsername()
{
    return strtolower($this->username);
}

public function setUsername($newUsername)
{
    $this->username = strtoupper($newUsername);
}
$user = new User();
$user->username = 'MaxAlmonte14'; // The value is set to MAXALMONTE14
echo $user->username; // Returns maxalmonte14

The gettables array is still available for compatibility reasons, however could be removed in future versions.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].