actualwave/object

非动态基本对象类,实现了getter/setter方法

0.0.5 2016-01-05 08:45 UTC

This package is not auto-updated.

Last update: 2024-09-14 18:52:55 UTC


README

Build Status Coverage Status Dependency Status Latest Stable Version Total Downloads License

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传递给属性修改器方法,即使属性设置为nullisset()也始终返回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