Re: [PHP5]__get, __set and isset()
| From: | Catalin Trifu | Date: | Tue, 31 Aug 2004 15:52:39 +0000 |
| Subject: | Re: [PHP5]__get, __set and isset() | ||
| References: | 1 2 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-195298@lists.php.net to get a copy of this message | ||
Hi,
Is this really a bug. I think not.
There is no variable $o->a or $a->b in the class OO
there is only the variable $elem and $a and $b is a member
of that array
So ...
The fact that PHP5 provides __set and __get magic
functions does not mean that the actual variables exist with
that particular name in the class ?
Perhaps it would be nice to have a __isset magic function ?
Cheers
Catalin
> <?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