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的新手
答案 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){}
所以你将拥有一致和完整的课程。