如何访问“父类”的参数函数


How to access an argument of the "parent" function?

例如我有以下代码:

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!");
?>