例如,我有以下代码:
function a($param)
{
function b()
{
echo $param;
}
b();
}
a("Hello World!");
抛出E_NOTICE错误,因为$ param当然是未定义的(在b()中)。
我无法将$ param传递给b(),因为b()应该是preg_replace_callback()的回调函数。 所以我有想法在$ GLOBALS中保存$ param。
有没有更好的解决方案?
答案 0 :(得分:10)
如果您使用的是PHP 5.3,则可以使用anonymous function代替use
关键字:
<?php
function a($param)
{
$b = function() use ($param)
{
echo $param;
};
$b();
}
a("Hello World!");
答案 1 :(得分:1)
BTW,因为它被标记为 functional-programming :在大多数函数式编程语言中,你只需要引用param
,它就在范围内,没问题。它被称为词法范围,或者有时会阻止范围界定。
它通常是没有显式变量声明的语言(例如“赋值定义”),使其变得复杂和/或破碎。和Java,它让你标记这些变量final
。
答案 2 :(得分:0)
我建议在这里使用对象。
Class a {
private $param;
private static $instance;
public function __construct($param){
$this->param = $param;
self::$instance = $this;
}
public function getParam(){
return $this->param;
}
public static function getInstance(){
return self::$instance;
}
}
function b(){
echo a::getParam();
}
答案 3 :(得分:0)
我建议使用每个函数孤独,并从第一个函数传递参数调用第二个函数。
它使您的代码更加清晰,因为每个函数都执行一组操作。
<?php
function a($param)
{
b($param);
}
function b($param)
{
echo $param;
}
a("Hello World!");
?>