这是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']();
?>
注意:未定义的变量:第7行的是否
输出应为:是
如果我通过替换$ YesNo像
直接将数组放入代码中<?php
function abc($YesNo){return $YesNo["value"];}
$x = array("active"=>function(){return abc(array("value"=>"Yes","text"=>"Yes"));});
echo $x['active']();
?>
输出:是
这是正确的输出。现在第一个代码有什么问题。我需要它用于可重用性
答案 0 :(得分:2)
试试这个,
您可以使用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']();
?>
答案 1 :(得分:1)
您为匿名函数提供参数:
$x = array("active"=>function($param){return abc($param);});
然后你称之为:
echo $x['active']($YesNo);
您可以使用use
关键字让您的函数了解外部变量:
$x = array("active"=>function() use ($YesNo) {return abc($YesNo);});
但在这种情况下,它会完全违背可重用性的想法。
答案 2 :(得分:1)
问题是由于Variable Scope而无法在函数中访问您的变量。
因为数组是在函数外部 定义的,所以函数内部默认情况下 。
有几个解决方案
免责声明:这些内容适合于问题范围。我理解他们不一定是最佳实践,这需要更大的讨论
第一选择: 您可以在函数中声明数组,如下所示。如果您不需要在函数外部访问它,这将非常有用。
function abc($YesNo){
$YesNo = array("value"=>"No","text"=>"No");
return $YesNo["value"];
}
第二种选择:
在您的abc函数中,您可以添加行global $YesNo
。如果执行需要访问函数外部的数组,这非常有用:
function abc($YesNo){
global $YesNo;
return $YesNo["value"];
}
存在其他选项(例如moonwave99的回答)。
最后: 为什么要在$ x的数组中放置一个匿名函数?似乎是一条将导致问题的道路......
答案 3 :(得分:1)
您的变量$ YesNo需要在匿名函数的范围内可见。您需要添加全局$ YesNo作为该函数中的第一个语句:
所以
$x = array("active"=>function(){return abc($YesNo);});
变为
$x = array("active"=>function(){global $YesNo; return abc($YesNo);});
...也“value”=&gt;“否”应为“value”=&gt;“是”如果您希望它返回“是”