Переменные PHP в анонимных функциях


119

Я играл с анонимными функциями в PHP и понял, что они, похоже, не достигают переменных вне их. Есть ли способ обойти эту проблему?

Пример:

$variable = "nothing";

functionName($someArgument, function() {
  $variable = "something";
});

echo $variable;  //output: "nothing"

Это выведет «ничего». Есть ли способ, которым анонимная функция может получить доступ к $variable?

Ответы:


277

Да, используйте закрытие :

functionName($someArgument, function() use(&$variable) {
  $variable = "something";
});

Обратите внимание, что для того, чтобы вы могли изменять $variableи извлекать измененное значение за пределами области действия анонимной функции, на него необходимо ссылаться в закрытии с помощью &.


Это новое! Это новый синтаксис в PHP 5.3.
Rocket Hazmat

1
@Rocket Итак, честно говоря, это настоящий синтаксис анонимной функции (в отличие от create_function()), и useключевое слово задокументировано (плохо) на той же странице документа, которая их описывает.
DaveRandom

4
Небольшое примечание для тех, кто может не знать: вы можете опустить &при передаче объекта, так как они всегда передаются по ссылке ... и не забывайте свой тип-подсказку :) Например:function() use (PDO $pdo) {
keyboardSmasher

@Alliswell Нет, это только для объектов, иначе вам нужно передать по ссылке, чтобы изменить переменную. См. Этот пример .
nickb 06
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.