ID: 29917 Comment by: fch at hexanet dot fr Reported By: dasch at ulmail dot net Status: Bogus Bug Type: Class/Object related Operating System: Linux PHP Version: 5.0.1 New Comment:
Sorry, but if you do that : $o->a = 'foo'; echo isset($o->a) ? "yes\n" : "no\n"; Expected result was true, but actual result is false ! And $o->a is set ! Previous Comments: ------------------------------------------------------------------------ [2004-08-31 16:20:45] [EMAIL PROTECTED] Thank you for taking the time to write to us, but this is not a bug. Please double-check the documentation available at http://www.php.net/manual/ and the instructions on how to report a bug at http://bugs.php.net/how-to-report.php This is correct, the isset() checks if a variable is set or not. In your case it\'s simply not set (it will be set after __get() is executed on it once). ------------------------------------------------------------------------ [2004-08-31 16:00:43] dasch at ulmail dot net Description: ------------ When trying to determine whether or not a property in an overloaded object is set, isset() always returns FALSE. This is not the case with objects that isn't overloaded (doesn't have a __get() method defined). Reproduce 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"; ?> Expected result: ---------------- yes no no yes Actual result: -------------- no no no yes ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=29917&edit=1