您可以使用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){}
所以你会有一致和完整的课程。