Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP在数组中存储匿名函数(类上下文)_Php_Arrays_Function_Class_Anonymous - Fatal编程技术网

PHP在数组中存储匿名函数(类上下文)

PHP在数组中存储匿名函数(类上下文),php,arrays,function,class,anonymous,Php,Arrays,Function,Class,Anonymous,我知道在PHP中可以将匿名函数存储为数组值,但为什么它在类上下文中返回NULL class firstClass { public static $functions = array(); function __construct() { self::$functions += array( "echo" => function( $text ) { echo $text; }, "fruit" => "apple" ); }

我知道在PHP中可以将匿名函数存储为数组值,但为什么它在类上下文中返回NULL

class firstClass {

    public static $functions = array();

    function __construct()
    {

        self::$functions += array( "echo" => function( $text ) { echo $text; }, "fruit" => "apple" );

    }

}

class secondClass {

    function __construct()
    {

        var_dump( firstClass::$functions ); // returns array(1){ ["fruit"] => string(5) => "apple" )
        var_dump( firstClass::$functions["echo"] ); // returns NULL

    }

}


$class = new firstClass;

第一类构造函数从不调用,您使用的是一个静态变量

有趣的是,您得到的是NULL-当我测试代码时,我得到了预期的结果,即notnull。 尝试下面的代码,也许这可以工作:如果没有,尝试升级您的PHP版本

// ----------------------------------------------------
// First try with a simple array, outside a class
// ----------------------------------------------------

$test_array = array(
    "string" => "some string" ,
    "function" => function() {
        echo 'i am an anonymous function outside a Class';
    }
);

var_dump($test_array);



// ----------------------------------------------------
// Now try in a Class context
// ----------------------------------------------------

class classContext {

    public static $functions = array();

    public function __construct() {
        self::$functions += array(
            "string" => "some string in classContext" ,
            "function" => function() {
                echo 'i am an anonymous function inside a Class';
            }
        );
    }

}

class secondClass {

    public function __construct() {
        var_dump(classContext::$functions);
        var_dump(classContext::$functions['function']);
    }
}

new classContext;
new secondClass;
结果如下:

array(2) {
    ["string"]=>
      string(11) "some string"

    ["function"]=>
      object(Closure)#1 (0) {}
}

array(2) {
    ["string"]=>
      string(27) "some string in classContext"

    ["function"]=>
      object(Closure)#3 (1) {
          ["this"]=> object(classContext)#2 (0) {}
      }
}

object(Closure)#3 (1) {
    ["this"]=> object(classContext)#2 (0) {}
}

没有调用第一个类的构造函数。对不起,我忘记添加初始化。但是一个正常值确实起作用,这很奇怪..我的荣幸@Ralph: