actualwave / object
非动态基本对象类,实现了getter/setter方法
0.0.5
2016-01-05 08:45 UTC
Requires
- php: >=7.0.0
Requires (Dev)
- phpunit/phpunit: 5.1.*
This package is not auto-updated.
Last update: 2024-09-14 18:52:55 UTC
README
PHP的非动态基本对象类。允许通过get*
和set*
方法使用公共/受保护访问器来创建getter和setter。未定义的属性将抛出错误。
安装
通过 composer
composer require actualwave/object
用法
基本上,您可以通过定义每个属性的独立方法来替代共享的魔法方法__set
、__get
、__isset
、__unset
- get* - 从大写字母开始的[属性名],用于读取属性值。
- set* - 从大写字母开始的[属性名],用于设置属性的新值。
- has* - 从大写字母开始的[属性名],用于检查属性是否设置。
- remove* - 从大写字母开始的[属性名],用于移除属性(通过在它上面调用
unset()
)。
has*
和remove*
方法具有默认操作,是可选的。默认情况下,has*
将始终为具有定义了getter的属性返回true
,而remove*
将尝试将null
传递给setter。
class MyObject extends \aw\Object { private $_property = null; public function getProperty(){ return 'GET-'.$this->_property; } public function setProperty($value){ $this->_property = 'SET-'.$value; } public function getData(){ return 'DATA:'.$this->hiddenProperty; } protected function getHiddenProperty(){ return 'hidden value'; } }
MyObject
的实例将是具有一个可读写属性property
的非动态对象,可以通过$instance->property
访问,以及两个只读属性--hiddenProperty
及其别名data
。
$instance = new MyObject(); echo $instance->property.PHP_EOL; // GET- $instance->property = 'something'; echo $instance->property.PHP_EOL; // GET-SET-something echo $instance->getData().PHP_EOL; // DATA:hidden value echo $instance->data.PHP_EOL; // DATA:hidden value echo $instance->anyProperty.PHP_EOL; // throws error Property accessor "anyProperty" not found.
您可以通过has*
和remove*
方法更改在isset
/unset
使用时的属性行为。
class StringProperty extends \aw\Object { private $_property = ''; public function getProperty():string { return $this->_property; } public function setProperty(string $value) { $this->_property = $value; } protected function hasProperty():bool { return (bool)$this->_property; } protected function removeProperty() { $this->_property = ''; } }
然后检查您的属性是否为空或将其设置为空
$prop = new StringProperty(); echo json_encode(isset($prop->property)).PHP_EOL; // false $prop->property = 'value'; echo json_encode(isset($prop->property)).PHP_EOL; // true unset($prop->property); echo json_encode($prop->property).PHP_EOL; // "" -- will output empty string in JSON format echo json_encode(isset($prop->property)).PHP_EOL; // false
注意:定义has*
和remove*
方法是可选的,但如果没有它们,您将无法定义对属性进行isset()
和unset()
操作的逻辑。没有它们,通过unset()
删除/删除属性只是尝试将null
传递给属性修改器方法,即使属性设置为null
,isset()
也始终返回true
class MySimpleObject extends \aw\Object { private $_property = null; public function getProperty(){ return $this->_property; } public function setProperty($value){ $this->_property = $value; } } $simple = new MySimpleObject(); $simple->property = 'something'; echo 'Is set: '.json_encode(isset($simple->property)).PHP_EOL; // Is set: true echo 'Is null: '.json_encode(is_null($simple->property)).PHP_EOL; // Is null: false unset($simple->property); echo 'Is set: '.json_encode(isset($simple->property)).PHP_EOL; // Is set: true echo 'Is null: '.json_encode(is_null($simple->property)).PHP_EOL; // Is null: true