Wednesday, 15 September 2010

PHP Magic behavior of magic __get -



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