1
class A {
    $props = array('prop1', 'prop2', 'prop3');
}

如何将上面定义的数组转换为类属性?最终结果将是..

class A {
    $props = array('prop1', 'prop2', 'prop3');
    public $prop1;
    public $prop2;
    public $prop3;
}

到目前为止我已经尝试过了:

public function convert(){
        foreach ($this->props as $prop) {
            $this->prop;
        }
    }

看起来有点难看,因为我是 php 新手

4

1 回答 1

2

您可以使用php 魔术方法 __get__set就像这样(在实施之前研究它们何时以及如何被调用):

class A {
    protected $props = array('prop1', 'prop2', 'prop3');

    // Although I'd rather use something like this:
    protected GetProps()
    {
        return array('prop1', 'prop2', 'prop3');
    }
    // So you could make class B, which would return array('prop4') + parent::GetProps()

    // Array containing actual values
    protected $_values = array();

    public function __get($key)
    {
        if( !in_array( $key, GetProps()){
            throw new Exception("Unknown property: $key");
        }

        if( isset( $this->_values[$key])){
            return $this->_values[$key];
        }

        return null;
    }

    public function __set( $key, $val)
    {
        if( !in_array( $key, GetProps()){
            throw new Exception("Unknown property: $key");
        }
        $this->_values[$key] = $val;
    }
}

您可以将其用作普通属性:

$instance = new A();
$a->prop1 = 'one';
$tmp = $a->undef; // will throw an exception

如果你能实现也很好:

  • public function __isset($key){}
  • public function __unset($key){}

所以你会有一致和完整的课程。

于 2012-10-05T06:19:22.053 回答