guidovanbiemen/setngeti

此包已被弃用,不再维护。没有建议的替代包。

PHP 5.4 的获取器和设置器

0.0.0 2013-04-21 19:23 UTC

This package is auto-updated.

Last update: 2020-08-05 05:49:41 UTC


README

使用 SetnGeti 允许您在 PHP 5.4+ 项目中定义对象属性的自动设置器和获取器。

自动设置器和获取器方法

通过使用 SetnGeti 方法,您可以通过仅向要公开的属性添加 @get 和/或 @set 标签来消除通常编写大量无用的获取和设置方法的努力。

class User
{

    use \SetnGeti\Methods;
    
    /**
    * Sample property
    *
    * @get
    * @set
    * @var string
    */
    private $username;

}

$user = new User();
$user->setUsername('johndoe');

echo $user->getUsername();

仅向属性添加 @get 标签,可以确保该属性仅可用于只读访问。另一方面,仅带 @set 标签的属性将是只写。

尝试访问没有 @set 的属性的 setMethod() 或没有 @get 的属性的 getMethod(),将引发 RuntimeException。

自动过滤和类型转换

当使用自动设置器设置属性时,您可以使用 @var 标签控制属性的 数据类型。@var 标签可以是以下类型之一

  • 类名
  • 接口名
  • mixed
  • 布尔型 (或 bool)
  • 整型 (或 int)
  • 双精度浮点型
  • 字符串
  • 数组
  • 对象
  • 资源
  • null

设置属性时,其值将被测试,如果是标量值,将被转换为所需的类型。

将对象设置到属性值时,它将根据所需的类或接口名称进行验证。如果传递了不兼容的对象,将引发 InvalidArgumentException。

设置器方法链

SetnGeti 的自动设置器方法默认通过返回所有者对象来实现方法链。这允许您编写如下代码

$user->setUsername('johndoe')
     ->setPassword('secret')
     ->store();

属性访问而不是获取器和设置器方法

作为将获取器和设置器方法添加到您的属性的一种替代方案,您可能希望在不将其标记为 public 的情况下从外部访问您的属性,这样您仍然可以控制对它们的访问。

为此,请添加 \SetnGeti\Properties 特性。现在,只要您添加了适当的 @get 和 @set 标签,您就可以访问私有和受保护的属性。

我不认为这种方法通常是好主意,但对于依赖于公共对象属性的遗留代码库,这可能是一个开始控制属性访问的合理选项。