Nette\Object a magická metoda __invoke()

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Pavel Janda
Člen | 977
+
0
-

Zdravím,

zajímalo by mě, zda už o tom někdo přemýšlel.

Nette\Object ověřuje existenci property objektu při přístupu k ní, stejně tak ověřuje existenci volaných metod objektu.

No jo, to je hezké, ale co když mám takovouto službu?

class FooService
{
	public function __invoke()
	{
		return 'bar';
	}
}

To mi potom Nette\Object bude řvát, že přistupuji, kam bych neměl:

$var = $this->fooService();

Nerad bych řešil, zda je to správné používat. Nelíbí se mi, že Nette tu možnost zabije.

Edit:

Uživatel Beton je hlupák a nezjistil si, že to není vlastnost Nette\Objectu, ale PHP.

Editoval Beton (27. 2. 2015 8:40)

David Matějka
Moderator | 6445
+
0
-

za to nemuze nette\object, viz https://bugs.php.net/bug.php?…

tl;dr; – musis si dat $this->fooService do promenne a volat to az na ni..

Pavel Janda
Člen | 977
+
0
-

Aah, díky. Lajdák..
Edit:
Omluva, Nette\Objecte. O:-)

Editoval Beton (25. 2. 2015 14:12)

chemix
Nette Core | 1310
+
0
-

@beton upravil bych titulek… doplnil bych do nej otaznik na konci, coz?

Pavel Janda
Člen | 977
+
0
-

To mi úplně nedává smysl. Pro moji tupost je moje otázka nesmyslná. Když přidám otazník k nadpisu, začne to dávat ještě menší smysl, jelikož Nette se k tomu nestaví nijak magicky a nestandardně.

chemix
Nette Core | 1310
+
0
-

spise mi slo o to, aby to bylo pro pripadne dohledavani patrnejsi co se zde resi … a jak se to vyresilo

Jan Tvrdík
Nette guru | 2595
+
+1
-

V PHP 7 je možné to napsat jako $var = ($this->fooService)();

Pavel Janda
Člen | 977
+
0
-

@chemix Jak se upravuje titulek? :D

chemix
Nette Core | 1310
+
0
-

@Beton editaci prvniho postu :)

David Matějka
Moderator | 6445
+
0
-

<ot>@chemix to muze imho jen mod :)</ot>

Filip Procházka
Moderator | 4668
+
0
-

@Beton @chemix už jsem to dávno upravil :) Myslím že by to takto mělo zůstat, aby to našli lidé, kteří „uvažují podobně“ :)