webhappens/magic-properties

为任何PHP类添加简单的getter、setter、访问器和mutator接口。

v0.3.0 2021-01-23 15:33 UTC

This package is auto-updated.

Last update: 2024-09-23 23:29:03 UTC


README

tests

魔法属性

为任何PHP类添加简单的getter、setter、访问器和mutator接口。

安装

通过composer安装

composer require webhappens/magic-properties

MagicProperties特性插入到您的类中

use \WebHappens\MagicProperties\MagicProperties;

如果您的类已经使用了__call方法,请将其添加到其中

public function __call($method, $arguments)
{
    // ...

    if ($property = $this->matchMagicProperty($name)) {
        return $this->callMagicProperty($property, $arguments);
    }

    // ...

    // throw new \BadMethodCallException();
}

获取器

获取器支持"属性"和"方法"语法,并允许您获取publicprotected属性。

$person = new class {
    use MagicProperties;

    public $name = 'Sam';
    protected $role = 'developer';
};

$name = $person->name;
// or
$name = $person->name();

$role = $person->role;
// or
$role = $person->role();

如果喜欢这种语法,Getter "方法"名称可以可选地以"get"为前缀。

$person->getName();

设置器

设置器支持"属性"和"方法"语法,并允许您设置publicprotected属性。

$person = new class {
    use MagicProperties;

    public $name;
    protected $role;
};

$person->name = 'Sam';
// or
$person->name('Sam');

$person->role = 'developer';
// or
$person->role('developer');

如果喜欢这种语法,Setter "方法"名称可以可选地以"set"为前缀。

$person->setName('Sam');

只读属性

如果您想保护特定的protected属性不被从类外设置,您可以在类中列出它们,在$readonly数组中。

protected $readonly = ['id'];

只读属性仍然可以使用标准的php语法从类内更改。

链式设置器

当使用设置器的"方法"语法时,您可以在单个链中设置多个属性。

$person->name('Sam')->role('developer');

访问器

当从类外调用getter以获取protected属性时,值会通过访问器方法传递,这给了您在返回之前修改它的机会。

当从类内调用时,只有当使用"方法"语法时,它才会通过访问器方法传递。

publicprivate属性永远不会通过访问器方法传递。

要为protected属性添加访问器方法,只需创建一个遵循访问器命名约定get{PropertyName}Propertyprotected方法即可。

该方法将接收存储的值作为单个参数,并应返回修改后的值。

$person = new class {
    use MagicProperties;

    protected $role = 'developer';

    protected function getRoleProperty($value)
    {
        return ucwords($value);
    }
};

$role = $person->role;
// or
$role = $person->role();

在这个例子中,角色将以首字母大写的方式返回。

mutator

当从类外调用setter以设置protected属性时,值会通过mutator方法传递,这给了您在设置之前修改它的机会。

当从类内调用时,只有当使用"方法"语法时,它才会通过mutator方法传递。

publicprivate属性永远不会通过mutator方法传递。

要为protected属性添加mutator方法,只需创建一个遵循mutator命名约定set{PropertyName}Propertyprotected方法即可。

该方法将接收传递的值作为单个参数,并应返回修改后的值。

$person = new class {
    use MagicProperties;

    protected $role;

    protected function setRoleProperty($value)
    {
        return ucwords($value);
    }
};

$person->role = 'developer';
// or
$person->role('developer');

在这个例子中,角色将以首字母大写的方式存储。

序列化

调用getMagicProperties方法将所有publicprotected属性序列化为一个数组。

致谢

我们的Str类只是Laravel的Str辅助函数的一些函数的副本。

许可证

MIT许可证(MIT)。有关更多信息,请参阅许可证文件