PHP Magic behavior of magic __get -
i have class, extended arrayobject
magic more magic:
class arrayobjectmagic extends arrayobject { public function __call($method, $args) { if (isset($this->$method)) homecoming $this->$method; homecoming isset($args[0]) ? $args[0] : new arrayobjectmagic(); } public function __get($name) { homecoming new arrayobjectmagic(); } }
and utilize class config
class. unusual behavor in fact, if arrayobjectmagic
obj created in config
, it's __get
magic method not fires! allow me show example:
$a = config::getinstance(); var_dump(get_class($a)); var_dump($a->abcdefg()); var_dump($a->abcdefg); var_dump("-----------"); $b = new arrayobjectmagic(); var_dump(get_class($b)); var_dump($b->abcdefg()); var_dump($b->abcdefg);
it outputs:
string(23) "vortex\arrayobjectmagic" object(vortex\arrayobjectmagic)#7 (1) { ["storage":"arrayobject":private]=> array(0) { } } undefined index: abcdefg null string(11) "-----------" string(23) "vortex\arrayobjectmagic" object(vortex\arrayobjectmagic)#8 (1) { ["storage":"arrayobject":private]=> array(0) { } } object(vortex\arrayobjectmagic)#8 (1) { ["storage":"arrayobject":private]=> array(0) { } }
why? thing, config
arrayobjectmagic
method:
protected function getarrayvalue($array = array()) { if ($this->use_array_object) { homecoming new arrayobjectmagic($array, arrayobjectmagic::array_as_props); } else { homecoming $array; } }
, somehow breaks it's __get
.
some kind of magic in magic...
you homecoming new instance of arrayobjectmagic.
i think wanted this:
public function __get($name) { $magic = new arrayobjectmagic(); homecoming $magic->$name; }
php magic-methods
No comments:
Post a Comment