hey,
in zend_object_handlers.c function zend_std_read_property we protect
against calling the __get function of an object if we're already in a
__get() function. (look for zobj->in_get) in that function.
i don't think we should be doing this.
simplyfied example:
<?php
class test {
function __get($offset) {
echo "__get($offset)\n";
switch ($offset) {
case 'name': return "name";
case 'length': return strlen($this->name);
}
}
}
$a = new test;
var_dump($a->length);
?>
outputs:
__get(length)
int(0)
but should say:
__get(length)
__get(name)
int(4)
i think recursive gets are highly useful and should be allowed. if we
really want to protect against recursion (here) we have two real
options: -a- protect against __get(ing) the same property more than
once in the same call-chain (mucho work), or -b- (preferred) have
some global infinite recursion protection in the engine (needs to be
done somewhen anyhow, but not now).
so, in one sentence: as we don't protect against recustion elsewhere,
can we please remove this unneded roadblock?
opinions?
-thies
--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php