ovlivnuje Nette Closure / Anonymous functions?
- wdolek
- Člen | 331
zdravim, uz si nejakou tu chvilku lamu hlavu, proc mi nefunguji Closures v modelu pro Nette… kdyz ten samy kod vyplivnu vedle do nejakeho naprosto nezavisleho skriptu, vse funguje jak ma
$x = function() {
echo time();
};
var_dump($x); // object(Closure)[1]
jakmile tento kod placnu treba do:
class Foo extends Nette\Object {
public static function myPublicFunc() {
$x = function() {
echo time();
};
var_dump($x); // null
}
}
dostanu misto object(Closure)[1]
jen ubohy
null
– takze callback se vubec nevyrobi … nejak mi nedochazi,
co by mohlo byt spatne, co by vlastnost jazyka mohlo ovlivnit.
- Apache/2.2.15 (Fedora)
- PHP 5.3.2
- Nette 0.9.4
PS: funkci modelove tridy volam z presenteru (ve startupu) – funkce vytvari logy…
Editoval wdolek (11. 6. 2010 14:22)
- Cifro
- Člen | 245
Zaujímavé. Vyskušal som s týmto kódom:
<?php
include "loader.php"; // minified
use \Nette;
class Foo extends Nette\Object {
public static function bar() {
$x = function() {
echo time();
};
var_dump($x); // toto vypise object(Closure)[...]
}
}
var_dump(Foo::bar()); // a toto vypise null
a pre PHP 5.3.2 s Nette 0.9.4 to vrati
object(Closure)[1]
null
a pre PHP 5.3.2 s Nette 1.0-dev to vrati
object(Closure)[5]
null
na WinXP s Apache 2.2.14
Editoval Cifro (11. 6. 2010 15:22)
- wdolek
- Člen | 331
var_dump(Foo::bar());
vraci null
zaslouzene. v tom problem nevidim (navratova hodnota
fce nikde neni dana, neni tam return
~ null
)… me jde
spise o to, ze mi var_dump
nevypise, ze jde o callback (instance
Closure
), ale vrati null
(callback prirazuji do
promenne $x
, s tim, ze s tim chci nadale pracovat jako s
$x(...)
– nechci zbytecne vyrabet dalsi fci, ktera bude na dve
pouziti)
- Patrik Votoček
- Člen | 2221
jenom jsem to rychle prolítnul. A řekl bych že tu došlo nedorozumění. Callback a closure jsou 2 různé věci.
EDIT:
něco evidentně špatně je protože:
\Nette\Debug::dump(function () { return time(); }); //object(Closure) (0) {}
Editoval vrtak-cz (11. 6. 2010 17:23)
- wdolek
- Člen | 331
muzete mi prosim vas ozkouset toto? (skeleton s closurama)… http://storage.wdolweb.cz/…es_0.9.4.zip
mam PHP 5.3.2 … v zipu je i jednoduchy soubor s par Closures ale ze jde o objekt Closure mi to vypise jen u jedne z nich.
dale jsem zjistil, ze v presenteru (v zipu) kdyz zakomentuju prvni ConsoleDump, tak je vystup jiny nez kdyz se provadi prvni prikaz…
celkove z toho mam pocit, ze nemuzu mit v jednom skriptu vice anonymnich fci, a nekdy ani to.. :D vazne to nechapu.
closure_test.php
mi vraci:
closure 1
null
closure 2
null
closure 3
object(Closure)[1]
presenter:
dummy dump
string(8) "dummy :D"
closure 1
NULL
closure 2
object(Closure) (0) {}
another dummy dump
string(8) "dummy :)"
closure 3
unknown type
Editoval wdolek (12. 6. 2010 22:08)