I’m trying to store anonymous functions in a static array property of my class. These functions should be invoked later by their index, but calling
self::$arr['index']()
just doesn’t work, while
$a = self::$arr['index'];
$a();
does!
This doesn’t work:
class A {
private static $func = array('a' => '');
public function __construct() {
self::$func['a'] = create_function('$str', 'echo "$str";');
}
public function go($str) {
self::$func['a']($str); // Call the function directly
}
}
$a = new A();
$a->go("hooray"); // Outputs "Undefined variable: func"
But this does:
class A {
private static $func = array('a' => '');
public function __construct() {
self::$func['a'] = create_function('$str', 'echo "$str";');
}
public function go($str) {
$a = self::$func['a']; // Pass the function name to a variable
$a($str); // Call the function via the variable
}
}
$a = new A();
$a->go("hooray"); // Outputs "hooray"
Why?
I’m using PHP Version 5.4.3
this is the behavior of php’s parser
calls
… the very sad thing is that in php you can’t do this:
as you can do in javascript, for example
what you can do is… use a temporary variable like you said
or
hope this helps…
in latest phps these features were added
and they work properly… so for some reason, this syntax doesn’t work only when using the scope resolution operator ( ClassName:: self:: etc)