Хорошо.Я предполагаю, что вы не говорите о фактических шаблонах поведения 'actAs'.
Если вы определите новый метод __get (), он автоматически переопределит родительский метод __get ().
Теперь вВаш новый метод __get (), вы сначала проверяете, существует ли он в вашем текущем экземпляре, а затем родительский.
Я взломал это вместе (имейте в виду, что уже почти полночь):
<?php
class bar {
public $data = array();
public function __construct() {
$this->data['virtual_field'] = "set in bar";
}
public function __get($name) {
if(array_key_exists($name, $this->data)) {
return $this->data[$name];
}
return null;
}
public function __set($name, $value) {
$this->data[$name] = $value;
}
}
class foo extends bar {
public $data = array();
public function __construct() {
}
public function __get($name) {
if(array_key_exists($name, $this->data)) {
return $this->data[$name];
}
if (parent::__get($name))
return parent::__get($name);
return null;
}
public function __set($name, $value) {
$this->data[$name] = $value;
}
}
$a = new foo;
echo $a->virtual_field;
Теперь я не знаю, насколько хорошо это работает для того, чего вы пытаетесь достичь.