例如我有以下代码:
function a($param)
{
function b()
{
echo $param;
}
b();
}
a("Hello World!");
抛出E_NOTICE错误,因为$param当然是未定义的(在b()中)。
我不能传递$param给b(),因为b()应该是preg_replace_callback()的回调函数。因此,我有了将$param保存在$GLOBALS中的想法。
有更好的解决方案吗?
如果您使用的是PHP 5.3,您可以使用匿名函数use
关键字代替:
<?php
function a($param)
{
$b = function() use ($param)
{
echo $param;
};
$b();
}
a("Hello World!");
顺便说一句,因为这被标记为函数式编程:在大多数函数式编程语言中,您只需引用param
,并且它将在范围内,没有问题。它被称为词法作用域,有时也称为块作用域。
通常是没有显式变量声明(例如"assign to define")的语言,这使得它变得复杂和/或破碎。和Java,它让你标记这样的变量final
我建议在这里使用对象。
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();
}
我建议单独使用每个函数,并通过参数从第一个函数调用第二个函数。
它使你的代码更清晰,因为每个函数只做一组操作。
<?php
function a($param)
{
b($param);
}
function b($param)
{
echo $param;
}
a("Hello World!");
?>