关于静态方法的PHP call_user_func

mok*_*gio 7 php runtime symfony

我在Symfony2上开发,我需要在类上调用一个方法,这两个方法都只在运行时知道.

我已经成功地使用变量函数call_user_func项目,但是这一次他们给我的问题...

我的代码看起来像这样

namespace MyBundleNamespace;

use MyBundle\Some\Class;

class MyClass
{
    public static function myFunction() { ... }
}
Run Code Online (Sandbox Code Playgroud)

在其他一些文件中,我需要这样做

MyClass::myFunction();
Run Code Online (Sandbox Code Playgroud)

但动态地,所以我尝试了两者

$class = "MyClass";
$method = "myFunction";

$class::$method();
Run Code Online (Sandbox Code Playgroud)

$class = "MyClass";
$method = "myFunction";
call_user_func("$class::$method");
Run Code Online (Sandbox Code Playgroud)

但是我收到了一个class MyClass not found错误.当然,这个类是正确包含的use,如果我这样调用MyClass::myFunction()就可以了.

我也尝试像这个问题答案评论中的建议手动触发自动加载器,但它不起作用.还class_exists退了false.

我错过了什么?有任何想法吗?

谢谢!

Jak*_*las 22

你错过了命名空间:

$class = '\\MyBundleNamespace\\MyClass';
$method = 'myFunction';
Run Code Online (Sandbox Code Playgroud)

两个调用应该工作:

call_user_func("$class::$method");
call_user_func(array($class, $method));
Run Code Online (Sandbox Code Playgroud)