php无法在静态方法调用中找到类

时间:2014-02-11 15:16:20

标签: php

我正在尝试使用字符串调用静态方法(解释器执行的一种自动eval)。

以字面方式调用代码可以完美地运行。自动加载器解析类加载并调用该方法。但是,如果我使用具有相同类和方法名称的字符串,则会失败。

工作示例:

$object = \vendor\package\class::method();

非工作示例:

$full_method = '\vendor\package\class::method';
$object = $full_method();

这两个例子都是有效的代码,第一个是完美的。第二个引发以下错误:

致命错误:在......

中调用未定义的函数\ vendor \ package \ class :: method()

自动加载器运行良好,即使在第二种情况下,检查加载的类,文件也会被加载。使用我缺少的“自动评估”功能有限制吗?

2 个答案:

答案 0 :(得分:0)

我认为你需要在你的情况下使用eval,因为它更复杂。您尝试立即从类执行方法。最好尝试按部件分解它们:

$temp = explode('::', $full_method);
$class = $temp[0];
$method = $temp[1];

$object = $class::$method();

答案 1 :(得分:0)

这也有效:

    $stringExploded = explode('::', $classBuilderMethod);            
    $ReflectionMethod = new \ReflectionMethod($stringExploded[0], $stringExploded[1]);
    $object = $ReflectionMethod->invoke(null); // the parameter is null because the method is static