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