maxalmonte14/magicproperties

此包已被废弃且不再维护。未建议替代包。

一个小巧但功能强大的包,允许你在PHP中隐式调用getter和setter。

v2.0 2018-11-13 13:04 UTC

This package is auto-updated.

Last update: 2020-02-13 17:00:24 UTC


README

StyleCI Build Status Scrutinizer Code Quality Code Coverage Build Status

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数组仍然存在,出于兼容性原因,但在未来的版本中可能会被删除。