这是PHP 5.4代码…
<?php
function abc($YesNo){return $YesNo["value"];}
$YesNo = array("value"=>"No","text"=>"No");
$x = array("active"=>function(){return abc($YesNo);});
echo $x['active']();
?>
注意:未定义变量:YesNo在第7行
输出应该是:Yes
如果我直接将数组放入代码中,可以像
那样替换$YesNo<?php
function abc($YesNo){return $YesNo["value"];}
$x = array("active"=>function(){return abc(array("value"=>"Yes","text"=>"Yes"));});
echo $x['active']();
?>
输出:Yes
这是正确的输出。现在第一个代码的问题是什么。我需要它来实现重用性
试试这个,
你可以使用use
传递数据给闭包。
<?php
function abc($YesNo){return $YesNo["value"];}
$YesNo = array("value"=>"No","text"=>"No");
$x = array("active"=>function() use ($YesNo) {return abc($YesNo);});
echo $x['active']();
?>
为匿名函数提供一个参数:
$x = array("active"=>function($param){return abc($param);});
那么你叫它:
echo $x['active']($YesNo);
您可以使用use
关键字使您的函数意识到外部变量:
$x = array("active"=>function() use ($YesNo) {return abc($YesNo);});
但是在这种情况下,它将与可重用性的想法背道而驰。
问题是,由于变量作用域,您的变量在函数内不可访问。
由于数组是在函数外部定义的,因此默认情况下,在函数内部不可用。 有几个解决方案 免责声明:这些是为了适应问题的范围。我知道它们不一定是最佳实践,这需要更大的讨论 第一选择:可以在函数中声明数组,如下所示。如果你不需要在函数之外访问它,这是很有用的。 第二选择:在abc函数中,可以添加 存在其他选项(例如moonwave99的答案)。 最后:为什么要在$x数组中放入一个匿名函数?似乎是一条会导致问题的道路....function abc($YesNo){
$YesNo = array("value"=>"No","text"=>"No");
return $YesNo["value"];
}
global $YesNo
行。如果和需要访问函数外部的数组,这是很有用的:function abc($YesNo){
global $YesNo;
return $YesNo["value"];
}
变量$YesNo需要在匿名函数的作用域中可见。您需要添加全局$YesNo作为该函数中的第一个语句:
$x = array("active"=>function(){return abc($YesNo);});
是
$x = array("active"=>function(){global $YesNo; return abc($YesNo);});
…如果你想让它返回"Yes"的话"value"=>"No"也应该是"value"=>"Yes"