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

时间:2011-07-16 15:04:48

标签: php functional-programming callback global-variables

例如,我有以下代码:

function a($param)
{
  function b()
  {
    echo $param;
  }
  b();
}
a("Hello World!");

抛出E_NOTICE错误,因为$ param当然是未定义的(在b()中)。

我无法将$ param传递给b(),因为b()应该是preg_replace_callback()的回调函数。 所以我有想法在$ GLOBALS中保存$ param。

有没有更好的解决方案?

4 个答案:

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