有没有办法为变量分配静态函数,或以其他方式完成此操作?
class my_class{
public static function my_method($a){
return $a;
}
}
$some_func = my_class::my_method;
$someAnonFunc = function($a) use ($some_func){
return $some_func($a);
}
$inst = new SomeOtherClass(); //Defined somewhere else, in some other file
$inst->someMethod($a, $someAnonFunc);
此时,我得到:
致命错误:未定义的类常量'my_method'
答案 0 :(得分:3)
函数不是PHP中的第一类..字符串是。如果您希望将call_user_func
语法作为一个单元使用,则必须使用::
:
$some_func = 'my_class::my_method';
$someAnonFunc = function ($a) use ($some_func) {
return call_user_func($some_func, $a);
}
尝试运行$some_func()
将无效,因为它会将冒号视为函数名称的一部分。
答案 1 :(得分:1)
我不确定我是否正确理解了您的问题,但您是否在寻找call_user_func?
您可以使用
调用静态方法call_user_func(array('myclass', 'my_method'), $arg1, $arg2, ...);
答案 2 :(得分:0)
我自己没试过,但试试
$some_func = 'my_class::my_method';
(例如,将类/方法指定为字符串)。
这可能无法正常工作,但我确实知道如下:
$x = 'mysql_real_escape_string';
$sql = "INSERT ... VALUES({$x($_GET['post'])})";
一样。丑陋,但有效。