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
+
+3
-

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)