关于静态方法的PHP call_user_func

时间:2012-05-10 12:49:08

标签: php symfony runtime

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

我已经在项目中成功使用了variable functionscall_user_func,但这次他们给了我一些问题......

我的代码看起来像这样

namespace MyBundleNamespace;

use MyBundle\Some\Class;

class MyClass
{
    public static function myFunction() { ... }
}

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

MyClass::myFunction();

但动态,所以我尝试了两个

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

$class::$method();

$class = "MyClass";
$method = "myFunction";
call_user_func("$class::$method");

但我收到class MyClass not found错误。当然,use正确地包含了这个课程,如果我打电话给MyClass::myFunction()就好了。

我也尝试按照this question answer评论中的建议手动触发自动加载器,但它不起作用。此外,class_exists返回了false

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

谢谢!

1 个答案:

答案 0 :(得分:19)

你错过了命名空间:

$class = '\\MyBundleNamespace\\MyClass';
$method = 'myFunction';

这两个电话都应该有效:

call_user_func("$class::$method");
call_user_func(array($class, $method));