Php 将静态函数赋值给变量

Php 将静态函数赋值给变量,php,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 SomeO

是否有任何方法可以将静态函数分配给变量,或者以其他方式完成此操作

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”


我自己没试过,但试一下

$some_func = 'my_class::my_method';
e、 g.将类/方法指定为字符串

这可能不起作用,但我确实知道:

$x = 'mysql_real_escape_string';

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

是的。丑陋,但有效。

我自己没试过,但试一下

$some_func = 'my_class::my_method';
e、 g.将类/方法指定为字符串

这可能不起作用,但我确实知道:

$x = 'mysql_real_escape_string';

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

是的。难看,但很有效。

函数在PHP中不是一流的。。字符串是。如果要将::语法作为一个单元来使用,则必须使用call\u user\u func:

$some_func = 'my_class::my_method';
$someAnonFunc = function ($a) use ($some_func) {
   return call_user_func($some_func, $a);
}

尝试运行$some_func将不起作用,因为它将冒号视为函数名的一部分。

函数在PHP中不是第一类。。字符串是。如果要将::语法作为一个单元来使用,则必须使用call\u user\u func:

$some_func = 'my_class::my_method';
$someAnonFunc = function ($a) use ($some_func) {
   return call_user_func($some_func, $a);
}

尝试运行$some_func将不起作用,因为它会将冒号视为函数名的一部分。

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

您可以使用

call_user_func(array('myclass', 'my_method'), $arg1, $arg2, ...);

不确定我是否正确理解了你的问题,但你在找我吗

您可以使用

call_user_func(array('myclass', 'my_method'), $arg1, $arg2, ...);

你为什么想要这样的东西?您可以在lambda函数中调用静态方法,而不会出现任何问题。$someAnonFunc本身将作为参数传递给另一个类的方法,该类不知道静态方法。我当然可以包括类文件,但在我看来,我的方法更干净,更可重用,如果你想知道的话。好吧,我想JavaScript比PHP更接近函数式语言。。。名称空间不是包含类定义的另一种方式吗?我真的在寻找一种方法,可以从任何地方调用某种指向函数的指针。@BinaryDeuce:JavaScript是一种函数式语言,不接近,这就是为什么你想要这样的东西?您可以在lambda函数中调用静态方法,而不会出现任何问题。$someAnonFunc本身将作为参数传递给另一个类的方法,该类不知道静态方法。我当然可以包括类文件,但在我看来,我的方法更干净,更可重用,如果你想知道的话。好吧,我想JavaScript比PHP更接近函数式语言。。。名称空间不是包含类定义的另一种方式吗?我真的在寻找一种方法,可以从任何地方调用某种指向函数的指针。@BinaryDeuce:JavaScript是一种函数式语言,不接近,这不是我的问题,但我在这里学到了一些东西-感谢:+1,因为函数不是PHP函数式语言的第一类:JavaScript、Lisp、Scheme、Haskell。。。不是PHP、Perl、Java或任何C系列。这是一个很大的区别,人们应该知道+1使用了您的解决方案。必须在第二个类中要求_一次作为第一个类,这不是我的问题,但我在这里学到了一些东西-感谢:+1,因为函数在PHP函数语言中不是第一个类:JavaScript、Lisp、Scheme、Haskell。。。不是PHP、Perl、Java或任何C系列。这是一个很大的区别,人们应该知道+1使用了您的解决方案。在第二节课中,我不得不要求你上第一节课,这是我想避免的,但我做不到