Weird PHP magic getter on an array -
i have weird issues magic getter/isset. have myobject defines magic getter/isset:
private $_data = array(); public function __get($name) { if (array_key_exists($name, $this->_data)) return $this->_data[$name]; throw new exception($name.': property doesn\'t exist.'); } public function __isset($name) { return isset($this->_data[$name]); }
if call:
isset($myobject->notexisting); empty($myobject->notexisting);
i have correct behaviour (__isset() called), while if call:
isset($myobject->notexisting['ok'])); empty($myobject->notexisting['ok']));
__isset() not called while __get() is.
this seems weird me php should first check $myobject->notexisting existence before trying it, shouldn't ?
according docs:
__isset() triggered calling isset() or empty() on inaccessible properties.
in isset($myobject->notexisting);
isset applies notexisting
property of $myobject
.
in isset($myobject->notexisting['ok']));
isset applies ok
element of $myobject->notexisting
array.
Comments
Post a Comment