He estado leyendo sobre las nuevas características de PHP 5.3, y una de las principales características son cierres.¿Los cierres de PHP están rotos o me falta algo?
A menos que esté muy muy equivocados, los desarrolladores de PHP son cualquiera:
a) confundiendo cierres con sólo funciones anónimas
b) los cierres se rompen en PHP 5.3.1 en la que estoy probando
De what wikipedia says los cierres son el mecanismo de las funciones anónimas más la vinculación de las variables de alcance primarias de la función con el alcance de la función. La última parte parece estar rota en PHP.
He comprobado errores de PHP, y no he encontrado nada sobre esto, curiosamente.
Así es como estoy probando:
<?php
function getFun() {
$x = 2;
return function() {
return $x;
};
}
$f = getFun(); // getFun()(); doesn't work -.-
var_dump($f()); // $f() == null
En lenguajes que realmente implementar cierres, devuelve 2:
def f():
x = 2
return lambda: x
print(f()()) # prints 2
y
alert((function() {
var x = 2;
return function() {
return x;
};
})()()); // alerts 2
Así que, ¿estoy equivocado o ?
No tengo el nuevo php para probar :( –