如何将数组值转换为类属性

时间:2012-10-05 06:10:36

标签: php arrays class properties

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的新手

1 个答案:

答案 0 :(得分:2)

您可以像这样使用php magic methods __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){}

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