php 中的另一个方法中的一个匿名方法调用
One anonymous method call in another method in php
我在另一个匿名方法中调用匿名方法时遇到问题。
<?php
$x = function($a)
{
return $a;
};
$y = function()
{
$b = $x("hello world a");
echo $b;
};
$y();
?>
错误:
Notice: Undefined variable: x in C:\xampp\htdocs\tsta.php on line 7
Fatal error: Function name must be a string in C:\xampp\htdocs\tsta.php on line 7
将 use
添加到您的 $y
函数,然后 $y
函数的范围将看到 $x
变量:
$y = function() use ($x){
$b = $x("hello world a");
echo $b;
};
您必须在同一块中使用匿名函数。
<?php
$y = function(){
$x = function($a){
return $a;
};
$b = $x("hello world a");
echo $b;
};
$y();
祝你好运!!
@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);
这种 "dependency injection" 对我来说似乎更清晰一些,而不是使用 'use' 对 $x 的隐藏依赖,但选择取决于你。
我在另一个匿名方法中调用匿名方法时遇到问题。
<?php
$x = function($a)
{
return $a;
};
$y = function()
{
$b = $x("hello world a");
echo $b;
};
$y();
?>
错误:
Notice: Undefined variable: x in C:\xampp\htdocs\tsta.php on line 7
Fatal error: Function name must be a string in C:\xampp\htdocs\tsta.php on line 7
将 use
添加到您的 $y
函数,然后 $y
函数的范围将看到 $x
变量:
$y = function() use ($x){
$b = $x("hello world a");
echo $b;
};
您必须在同一块中使用匿名函数。
<?php
$y = function(){
$x = function($a){
return $a;
};
$b = $x("hello world a");
echo $b;
};
$y();
祝你好运!!
@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);
这种 "dependency injection" 对我来说似乎更清晰一些,而不是使用 'use' 对 $x 的隐藏依赖,但选择取决于你。