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