Змінні 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.
Ракета Hazmat

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

4
Коротка примітка для тих, хто, можливо, не знає: Ви можете скидати те, &коли передаєте об'єкт, оскільки вони завжди передаються за посиланням ... і не забувайте про свій підказку :) Напр .:function() use (PDO $pdo) {
клавіатураSmasher

@Alliswell Ні, це лише для об'єктів, інакше вам потрібно пройти посилання, щоб змінити змінну. Дивіться цей приклад .
nickb
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.