Frédéric hardy wrote:
Is it possible to do something like this :

class foo
{
    private $array = array();

    function __construct()
    {
        ...
    }

function __get($key)
{
return (isset($this->array[$key]) == false ? null : $this->array[$key]);
}


    function __set($key, $value)
    {
        $this->array[$key] = $value;
    }
}

$foo = new foo();

if (isset($foo->bar) == false)
    $foo->bar = 'bar';
else
    echo $foo->bar;

It seems that isset($foo->bar) return ALWAYS false.
Bug ?

Fred.
It seems that you are right. I've tried off this code:

        <?php

        class OO
        {
                private $elem = array("a" => 1);
        
                public function __get ($prop)
                {
                        if (isset($this->elem[$prop])) {
                                return $this->elem[$prop];
                        } else {
                                return NULL;
                        }
                }
        
                public function __set ($prop, $val)
                {
                        $this->elem[$prop] = $val;
                }
        }

        $o = new OO();

        echo isset($o->a) ? "yes\n" : "no\n";
        echo isset($o->b) ? "yes\n" : "no\n";

        echo is_null($o->a) ? "yes\n" : "no\n";
        echo is_null($o->b) ? "yes\n" : "no\n";

        ?>

I expected something like this:

        yes
        no
        no
        yes

But got this:

        no
        no
        no
        yes

It looks like isset() can't handle object properties correctly. I'll post the bug on php.net.

--
Daniel Schierbeck

--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php



Reply via email to