Closures в PHP: подробности
Внимательно прочитав документ по замыканиям в PHP, я вынес для себя следующее. Патч работает очень просто и довольно изящно. Замыкания — это
class Example {
public function __invoke () {
echo "Hello World!\n";
}
}
$foo = new Example;
$foo ();Слово «use», которое появилось в полной версии создания функции — это, конечно, уже полностью новый синтаксис, а не просто косметические изменения. Для тех, кто не прочитал документ, поясняю, что анонимная функция может быть создана, например, так:
function getAdder($x) {
return function ($y) use ($x) {
// or: lexical $x;
return $x + $y;
}
}«Use» вытекает из идеологии PHP, где глобальные переменные не видны сразу внутри функции, а определяются программистом (тоже хаком, кстати). «Use» именно «доставляет» переменную. Причём не из глобального уровня, а с родительского уровня. Что (ура) реализует мою давнюю мечту об изоляции переменных.
Комментарии 13
Я думаю, в один прекрасный день, ты откроешь для себя либо C++, либо
preg_replace_callback ('/( +) /', function($a) {…}, $text)
?
Input:
$lambda = function () { echo «Hello World!\n»; };
var_dump($lambda);
Output:
object(Closure)#1 (0) {
}
Да.
Input:
$array = array(1, 2, 3);
$array = array_map(function($v) { return $v * $v; }, $array);
var_dump($array);
Output:
array(3) {
[0]=>
int(1)
[1]=>
int(4)
[2]=>
int(9)
}
Спасибо! Это радует.
Чего
Я
Это не очевидное, всё это прямо упоминается в статье )