我正在尝试使用字符串调用静态方法(解释器执行的一种自动eval)。
以字面方式调用代码可以完美地运行。自动加载器解析类加载并调用该方法。但是,如果我使用具有相同类和方法名称的字符串,则会失败。
工作示例:
$object = \vendor\package\class::method();
非工作示例:
$full_method = '\vendor\package\class::method';
$object = $full_method();
这两个例子都是有效的代码,第一个是完美的。第二个引发以下错误:
致命错误:在......
中调用未定义的函数\ vendor \ package \ class :: method()自动加载器运行良好,即使在第二种情况下,检查加载的类,文件也会被加载。使用我缺少的“自动评估”功能有限制吗?
答案 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