Pull to refresh

Comments 3

Забавное решение ;) Но Scope chain, т.е. несколько вложенных функций, уже не создать. Уже больше года не программировал на PHP (5.3а. застал ещё с замыканиями), так что, интересно было вспомнить. Спасибо. По поводу параметров call_user_func_array, которые передаются по значению — тоже полезная информация, равно как и трюк с debug_backtrace.

# if($key == 'scope')
# {
# $header_end = '$'.$key.'=&$scope["'.$key.'"];';
# }

Эта ветка на первый взгляд кажется лишней.
dsCode, почему же нельзя? С UPD # 2 вполне можно. :^) (Я проверил — работает прекрасно). В массиве closure хранится для каждой функции, так что никаких проблем с пересечением не будет. Единственное — я задумаюсь над способом генерации id (в некоторых случаях возможны коллизии.

> Эта ветка на первый взгляд кажется лишней.

Но на самом деле это не так. :^) Дело в том, что в самом окружении может быть переменная scope, и если она идёт не последней, то обычный порядок создания переменных окружения затрёт наш буфер $scope, а в конце переменная $scope будет всё равно уничтожена через unset (зачем этот массив в функции?). Вот для контроля за этой ситуацией ветка и написана.
>Когда ссылка на переменную остаётся единственной, PHP её зачем-то преобразует в само значение

например чтобы восстанавливать нормальные переменные после такого прохода foreach($array as &$item)
Sign up to leave a comment.

Articles