class DICT {
// список объектов
private $objects = [];
// создание объекта
public function __set($name, $value){
if( !isset( $this->objects[$name] ) ){
$this->objects[$name] = $value;
}else{
echo 'DICT name "'. $name .'" is already exist!';
}
}
// вызов объекта
public function __call($name, $args){
if( isset( $this->objects[$name] ) ){
return call_user_func_array($this->objects[$name], $args);
}else{
echo 'DICT name "'. $name .'" is not exist!';
}
}
}
$a = new DICT;
$a->b = function(){ echo 'b'; };
$a->c = new DICT;
$a->b(); // работает
$a->c->d = function(){ echo 'd'; };
$a->c->d(); // warning Creating default object from empty value - и не выводит 'd'
Предупреждение, типа я пытаюсь присвоить не созданному объекту свойство.
В чем может быть проблема? Спасибо!
Рабочий вариани (by Алексей Уколов)
class DICT {
// список объектов
private $objects = [];
// создание объекта
public function __set($name, $value){
$this->objects[$name] = $value;
}
// вызов объекта
public function __call($name, $args){
return call_user_func_array($this->objects[$name], $args);
}
// вызов объекта
public function __get($name){
return $this->objects[$name];
}
}
$a = new DICT;
$a->b = function(){
echo 'test 1';
};
$a->b(); // "test 1"
$a->c = new DICT;
$a->c->d = function(){
echo 'test 2';
};
$a->c->d(); // "test 2"