Chování isset nad \nette\object magickými vlastnostmi
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- josef.sabl
- Člen | 153
Je chování isset nad \Nette\Object v pořádku?
Chování vanilla PHP:
class Foo
{
public $bar = NULL;
}
$f = new Foo;
var_dump($f->bar); //Vrátí NULL
var_dump(isset($f->bar)); //Vrátí FALSE
A pokud to přepíšeme s \Nette\Object:
class Foo extends \Nette\Object
{
private $bar = NULL;
public function getBar() {
return $this->bar;
}
}
$f = new Foo;
var_dump($f->bar); //Vrátí NULL
var_dump(isset($f->bar)); //Vrátí TRUE !!!!!!!!!
Oprava vypadá na první pohled jednoduše. Viz. Object.php.
public function __isset($name)
{
return ObjectMixin::has($this, $name) && ObjectMixin::get($this, $name) !== NULL;
}
Originál:
public function __isset($name)
{
return ObjectMixin::has($this, $name);
}
Proč to takto není? PHP o isset říká: Determine if a variable is set and is not NULL. Takže bych čekal, že toto chování nette objectu je buga.
Editoval josef.sabl (19. 5. 2016 11:25)