В своем последнем посте я кратко упомянул, что в марте Wez Furlong сделал патч , позволяющий использовать собственный синтаксис для создания анонимных функций. Это может заменить гнусную create_function
.
С тех пор я снова поднял оригинальный патч Wez в списках php-internals. Это вызвало некоторые серьезные дебаты за последнюю неделю. Похоже, что основным аргументом против утверждения патча является то, что можно ожидать, что статические правила области применения будут применены к анонимной функции. В конце концов, это имеет место в подобных языках, которые поддерживают анонимные функции. Можно только предположить, что изменение PHP для поддержки этого было бы серьезной задачей.
Кажется, можно ошибаться.
Сегодня Кристиан Сейлер опубликовал патч, чтобы разрешить использование анонимных функций. Есть несколько свободных концов, но, похоже, это работает в целом. Вместо того, чтобы все переменные следовали правилам статической области видимости, вводится новое ключевое слово ( lexical
). Он работает аналогично global
в том global
, что он должен быть явно объявлен, какие переменные имеют лексическую область видимости. Вот как это выглядит в действии:
function getAdder($x) { return function ($y) { lexical $x; return $x + $y; }; } $add2 = getAdder(2); $add2(8); // return 10
Наверное, пока рано говорить, найдется ли это в языке. Это все еще просто предложение, и для его правильной работы потребуется дополнительная работа, но, по крайней мере, это представляется технически возможным. Придется подождать и посмотреть.
В противном случае, осталось только пожелать вам счастливого Рождества.