Php 如何访问“的参数”;“家长”;功能?

Php 如何访问“的参数”;“家长”;功能?,php,functional-programming,callback,global-variables,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的想法 有更好的解决方案吗?如果您使用的是PHP 5.3,您

例如,我有以下代码:

function a($param)
{
  function b()
  {
    echo $param;
  }
  b();
}
a("Hello World!");
这会抛出一个E_NOTICE错误,因为$param当然是未定义的(在b()中)

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


有更好的解决方案吗?

如果您使用的是PHP 5.3,您可以使用with
use
关键字:

<?php
function a($param)
{
  $b = function() use ($param)
  {
    echo $param;
  };

  $b();
}
a("Hello World!");

我建议在这里使用对象

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

顺便说一句,因为它被标记为函数式编程:在大多数函数式编程语言中,您只需参考
param
,它将在范围内,没有问题。它被称为词汇作用域,或者有时称为块作用域


通常是没有显式变量声明的语言(例如“assign to define”)使其变得复杂和/或不完整。而Java,它让你标记这些变量
final

FYI,
b
如果可以访问
$param
@delnan:你使用哪个PHP版本?@Felix Kling:没有,你为什么要问?闭包是一个语言不可知的概念。@delnan:哦,对不起,我实际上想问OP;)行动?我在XAMPP上有PHP5.3.1。我以前从未见过这个功能+我想用b()作为preg_replace_callback的回调函数。因此,您的解决方案,我必须使$PARAM全球可用。也许这些链接帮助您:[也许您必须考虑其他的选择,因为上面的解决方案由Ondrej Slint AK只在PHP 5.3中工作。在PHP 5.2中,它返回第4行中的解析错误。是的,但是我构建的脚本只最小化了我自己的脚本(SO 5.3.1)。.但是在使用PHP5.3 create_function()之前,preg_replace_回调的替代方法会是什么样子呢?你能给我一个例子吗。