PHP хранит анонимную функцию в массиве (контекст класса)

Я знаю, что можно сохранить анонимную функцию как значение массива в 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;

0

Решение

Забавно, что вы получаете NULL — когда я тестирую ваш код, я получаю ожидаемый результат (т.е. не NULL).
Попробуйте следующий код, может, это сработает: (если нет, попробуйте обновить версию 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) {}
}
0

Другие решения

конструктор firstClass никогда не вызывать, вы используете статическую переменную

1