Рефакторинг закрытий/анонимных функций в PHP

Можно ли реорганизовать анонимную функцию из кода следующим образом:

function foo($path, $callback) {
 $callback();
}

$app = array('a', 'b', 'c');

foo('vehicle/:id', function() use ($app) {
 echo $app[0];
});

Я пробовал это, но ничего не ответил:

function foo($path, $callback) {
 $callback();
}

$vehicleCallback = function() use ($app) {
 echo $app[0];
};

$app = array('a', 'b', 'c');

foo('vehicle/:id', $vehicleCallback);

Другие варианты дали мне синтаксические ошибки. Я хочу переместить функции в отдельный файл, если это имеет значение.

Это моя конечная цель

callbacks.php

$cb1 = function () use ($app) {
 // things
};

$cb2 = function () use ($app) {
 // things
};

// ...more callbacks

router.php

require 'callbacks.php';

$app = new \Foo();

// code that might possibly manipulate $app

$app->bar('/some/relative/path/:param1', $cb1);
$app->bar('/another/relative/path', $cb2);

// possibly more code that mutates $app and then more callbacks
1 ответ

Вы обязательно должны включить error_reporting:

Примечание. Неопределенная переменная: приложение... в строке 6

Когда вы перемещаете линию:

$app = array('a', 'b', 'c');

в начале вашего скрипта, вы получите результат a

РЕДАКТИРОВАТЬ

Вы можете использовать $app таким образом:

<p> <span>EDIT2</span></p> <p> Пример кода для вашего класса</p> <pre class="prettyprint linenums">&lt;!--?php $cb1 = function ($app, $path) { // things $app---&gt;display('cb1 '.$path.''); }; $cb2 = function ($app, $path) { // things $app-&gt;display('cb2 '.$path); }; class Foo { public function display ($string) { echo strtoupper($string); } public function bar ($path, $closure) { $closure($this, $path); } } $app = new \Foo(); // code that might possibly manipulate $app $app-&gt;bar('/some/relative/path/:param1', $cb1); $app-&gt;bar('/another/relative/path', $cb2); // possibly more code that mutates $app and then more callbacks</pre>

licensed under cc by-sa 3.0 with attribution.