Re: [PHP5]__get, __set and isset()
| From: | M. Sokolewicz | Date: | Tue, 31 Aug 2004 16:14:59 +0000 |
| Subject: | Re: [PHP5]__get, __set and isset() | ||
| References: | 1 2 3 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-195299@lists.php.net to get a copy of this message | ||
next time, please read the isset documentation carefully. I quote:
[quote]isset() will return FALSE if testing a variable that has been set to NULL.[/quote]
Catalin Trifu wrote:
Hi,Is this really a bug. I think not. There is no variable $o->a or $a->b in the class OOthere is only the variable $elem and $a and $b is a member of that arraySo ... The fact that PHP5 provides __set and __get magicfunctions 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