以这种方式生成对象并执行方法时,PHP会出错。
class A {
static public function b() {
$o = new get_called_class(); // works
$class = get_called_class();
$o = new $class; // works
$o = (new $class)->method(); // works
$o = (new get_called_class())->method(); // doesn't work
// error message: Class '...\get_called_class' not found
$o = (new (get_called_class()))->method(); // doesn't work
// error message: syntax error, unexpected '('
}
}
为什么最后几行失败?
如何一行编写?
答案 0 :(得分:1)
不幸的是,您不能直接使用函数的返回值来执行此操作,但是可以将其保存到变量中并使用该变量。您还可以使用static
或self
常量。
$class = get_called_class();
$o = (new $class())->method();
$o = (new static())->method();
$o = (new self())->method();
答案 1 :(得分:1)
完全不可能。如果要使用实例,请将其存储在变量中。
class MyClass {
public function method(): string {
return "Hello World";
}
}
$instance = new MyClass();
$result = $instance->method();
如果不需要实例,可以使用静态方法解决。
class MyClass {
public static function method(): string {
return "Hello World";
}
}
$result = MyClass::method();