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

Reply via email to