dooaki / class-accessor
提供类型约束的访问器/修改器生成特性
1.1.0
2016-07-07 02:29 UTC
Requires
- php: >=5.5.0
- symfony/polyfill-php70: ^1.1
Requires (Dev)
- phpunit/phpunit: ~4.8
- satooshi/php-coveralls: ~1.0
This package is not auto-updated.
Last update: 2024-09-18 20:27:43 UTC
README
需求
- PHP 5.5 或更高版本
安装
您可以运行以下命令进行安装。
composer require dooaki/class-accessor
概要
<?php use dooaki\ClassAccessor\Accessor; class Person { private $first_name; private $age; use Accessor { _helperStringOrNullGetter as public getFirstName; _helperStringOrNullSetter as public setFirstName; _helperIntGetter as public getAge; _helperIntSetter as public setAge; } public function show() { echo "{$this->first_name} ({$this->age})"; } } $p = new Person(); $p->setFirstName('john'); $p->setAge(23); var_dump($p->getFirstName()); // string(4) "john" var_dump($p->getAge()); // int(23) $p->show(); // john (23) $p->setFirstName(null); // ok name is nullable $p->setAge("23"); // TypeError exception!
描述
\dooaki\ClassAccessor\Accessor 特性为您的类生成类型约束的获取器/设置器。
您可以使用 _helper(Int|Float|String|Bool|Array|Callable|Resource)(OrNull)?(Getter|Setter) 方法。
make_accessor 命令
您可以创建任何类型的访问器。
命令示例
vendor/bin/make_accessor -n My\DateAccessor -c DateTimeInterface -c DateInterval -f DateAccessor.php
选项
- -n 生成特性的名称
- -c 访问器方法的类或接口
- -f 输出文件
代码示例(使用)
<?php require __DIR__ . '/vendor/autoload.php'; require __DIR__ . '/DateAccessor.php'; use My\DateAccessor; use dooaki\ClassAccessor\Accessor; class DelayedDateTime { /** @var DateTimeInterface */ private $date_time; /** @var DateInterval */ private $delay; use Accessor, DateAccessor { _helperDateTimeInterfaceObjectGetter as public getDateTime; _helperDateTimeInterfaceObjectSetter as public setDateTime; _helperDateIntervalObjectOrNullGetter as public getDelay; _helperDateIntervalObjectOrNullSetter as public setDelay; } public function __construct(DateTime $date_time) { $this->date_time = $date_time; } public function get() { $retval = clone $this->date_time; if ($this->delay) { $retval->sub($this->delay); } return $retval; } } $m = new DelayedDateTime(new DateTime()); $m->setDelay(new DateInterval('P1D')); echo $m->get()->format('Y-m-d H:i:s');
感谢
此模块受 MagicSpice 启发
作者
do_aki
许可
MIT 许可证