maxalmonte14 / magicproperties
一个小巧但功能强大的包,允许你在PHP中隐式调用getter和setter。
Requires
- php: ^7.0
Requires (Dev)
- phpunit/phpunit: ^6.5
This package is auto-updated.
Last update: 2020-02-13 17:00:24 UTC
README
MagicProperties是一个小巧但功能强大的包,允许你在所有想要的物体中隐式调用getter和setter,类似于C#属性或Laravel访问器和修改器(用于Eloquent ORM)。
要求
PHP >= 7.0
安装
composer require "maxalmonte14/magicproperties"
示例
让我们开始!使用MagicProperties,您可以以透明的方式访问getter和setter,而无需暴露您的业务逻辑。首先,在您的类中使用特性。
use MagicProperties\AutoAccessorTrait, AutoMutatorTrait; class User { use AutoAccessorTrait, AutoMutatorTrait; private $username; private $token; }
注意:AutoAccessorTrait和AutoMutatorTrait使用__get和__set PHP魔法方法,如果您在类中使用它,肯定会收到一些错误,所以不要这样做!
第二步,在构造函数中定义您的可获取和可设置属性。
public function __construct() { $this->gettables = ['username']; $this->settables = ['username']; }
第三步,为您的可获取和可设置属性定义自己的getter和setter。
public function getUsername() { return strtolower($this->username); } public function setUsername($newUsername) { $this->username = strtoupper($newUsername); }
注意:您必须按照“get + 属性名”和“set + 属性名”的约定定义您的getter和setter,否则属性将不会通过调用任何方法来设置或获取。您的方法名称可以是驼峰式或蛇形,无论如何,它都将正常工作!
最后一步,享受调用您的属性!
$user = new User(); $user->username = 'MaxAlmonte14'; // The value is set to MAXALMONTE14 echo $user->username; // Returns maxalmonte14
注意:请注意这一点,该包不会将所有私有属性公开到公共上下文中,只有定义在gettables和settables数组中的属性才是可访问的。因此,如果您尝试访问非可获取/不可设置的私有属性,将抛出异常。
echo $user->token; // An InvalidPropertyCallException is thrown!
从版本2.0开始,即使您没有在gettables
数组中注册您的属性,getter也会自动调用。以下示例应该按预期工作。
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
gettables
数组仍然存在,出于兼容性原因,但在未来的版本中可能会被删除。