У меня проблема с вызовом анонимного метода в другом анонимном методе.
<?php
$x = function($a)
{
return $a;
};
$y = function()
{
$b = $x("hello world a");
echo $b;
};
$y();
?>
Ошибка:
Примечание: неопределенная переменная: x в C: \ xampp \ htdocs \ tsta.php в строке 7
Неустранимая ошибка: имя функции должно быть строкой в C: \ xampp \ htdocs \ tsta.php в строке 7
добавлять use
на ваш $y
функция, то объем $y
функция увидит $x
переменная:
$y = function() use ($x){
$b = $x("hello world a");
echo $b;
};
Ответы @argobast и @ hiren-raiyani действительны. Наиболее общим является первый, но последний более уместен, если единственным потребителем первой анонимной функции является вторая (т.е. $ x используется только $ y).
Другой вариант (для этого нужно изменить сигнатуру функции $ y) — передать анон. функция в качестве аргумента функции:
<?php
$x = function($a)
{
return $a;
};
$y = function(Closure $x)
{
$b = $x('hello world a');
echo $b;
};
$y($x);
Этот вид «внедрения зависимостей» кажется мне чище, вместо того, чтобы иметь скрытую зависимость от $ x с «использованием», но выбор за вами.
Вы должны использовать анонимную функцию в том же блоке.
<?php
$y = function(){
$x = function($a){
return $a;
};
$b = $x("hello world a");
echo $b;
};
$y();
Удачи!!