1

有没有办法将静态函数分配给变量,或者以其他方式完成?

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”

4

3 回答 3

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()将不起作用,因为它将冒号视为函数名称的一部分。

于 2012-09-10T21:12:14.760 回答
1

不确定我是否正确理解了您的问题,但您在寻找call_user_func吗?

您可以使用调用静态方法

call_user_func(array('myclass', 'my_method'), $arg1, $arg2, ...);
于 2012-09-10T21:13:37.057 回答
0

这个我自己没试过,但是试试

$some_func = 'my_class::my_method';

(例如,将类/方法分配为字符串)。

这可能无法按原样工作,但我确实知道类似:

$x = 'mysql_real_escape_string';

$sql = "INSERT ... VALUES({$x($_GET['post'])})";

做。丑陋,但有效。

于 2012-09-10T21:11:11.037 回答