PHP: могут ли анонимные функции внутри ассоциативного массива обращаться к другим членам массива? - PullRequest
4 голосов
/ 16 августа 2011

В следующем примере возможно ли получить доступ к значению 'str' из анонимной функции?

$foo = array(
  'str' => 'THIS IS A STRING',
  'fn' => function () {
    // is it possible from within here to access 'str'?
  }
);

Ответы [ 2 ]

2 голосов
/ 16 августа 2011

если $foo определено в глобальном пространстве имен, вы сможете получить к нему доступ через $GLOBALS['foo']['str'] (или сделать его доступным через конструкцию global $foo;). Если это не так (локальная переменная, параметр, переменная-член,…), вы должны передать его (как ссылку!) Анонимной функции:

$foo = array(
  'str' => 'THIS IS A STRING',
  'fn' => function () use(&$foo) {
    echo $foo['str'];
  }
);
0 голосов
/ 30 мая 2012

Я нашел другой способ сделать это без использования глобальных переменных:

<?php

    $arr = array("a" => 12,
                "b" => function($num)
                        {
                            $c = $num * 2;
                            return $c;
                        });

    echo $arr["b"]($arr["a"]);
?>

Обратите внимание на странный синтаксис завершения вызова индекса массива круглыми скобками . Передав $arr["a"] в качестве параметра, вы можете получить доступ к этому значению (я думаю, вы могли бы также передать по ссылке).

Если бы вы были не , чтобы передать что-либо в анонимная функция, вы бы назвали ее так:

$arr["b"]();

Если вы не включите скобки метода, он не будет работать.

...