Re: [PHP5]__get, __set and isset()

From: Date: Tue, 31 Aug 2004 13:54:39 +0000
Subject: Re: [PHP5]__get, __set and isset()
References: 1  Groups: php.general 
Request: Send a blank email to php-general+get-195281@lists.php.net to get a copy of this message
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

« previous php.general (#195281) next »