Один анонимный вызов метода в другом методе в переполнении стека

У меня проблема с вызовом анонимного метода в другом анонимном методе.

<?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

2

Решение

добавлять use на ваш $y функция, то объем $y функция увидит $x переменная:

$y = function() use ($x){
$b = $x("hello world a");
echo $b;
};
4

Другие решения

Ответы @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 с «использованием», но выбор за вами.

0

Вы должны использовать анонимную функцию в том же блоке.

<?php

$y = function(){
$x = function($a){
return  $a;
};
$b = $x("hello world a");
echo $b;
};
$y();

Удачи!!

-1
По вопросам рекламы [email protected]