我在另一个匿名方法中调用匿名方法时遇到问题。
<?php
$x = function($a)
{
return $a;
};
$y = function()
{
$b = $x("hello world a");
echo $b;
};
$y();
?>
错误:
注意:未定义的变量:第7行的C:\ xampp \ htdocs \ tsta.php中的x
致命错误:第7行的C:\ xampp \ htdocs \ tsta.php中的函数名必须是字符串
答案 0 :(得分:4)
将use
添加到您的$y
函数,然后$y
函数的范围将显示$x
变量:
$y = function() use ($x){
$b = $x("hello world a");
echo $b;
};
答案 1 :(得分:0)
@argobast和@ hiren-raiyani答案均有效。最通用的是第一个,但如果第一个匿名函数的唯一消费者是第二个消费者(即$ x仅由$ y使用),则后者更合适。
另一个选项是(这个需要更改$ y函数的签名)是传递anon。作为函数的参数:
<?php
$x = function($a)
{
return $a;
};
$y = function(Closure $x)
{
$b = $x('hello world a');
echo $b;
};
$y($x);
这种依赖注入&#34;对我来说似乎有点干净,而不是使用&#39;使用&#39;隐藏依赖于$ x,但选择权取决于你。
答案 2 :(得分:-1)
您必须在同一个块中使用匿名函数。
<?php
$y = function(){
$x = function($a){
return $a;
};
$b = $x("hello world a");
echo $b;
};
$y();
祝你好运!!