为变量分配静态函数

时间:2012-09-10 21:07:26

标签: php

有没有办法为变量分配静态函数,或以其他方式完成此操作?

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'

3 个答案:

答案 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'])})";

一样。丑陋,但有效。