PHP:使用函数结果创建匿名类

PHP:使用函数结果创建匿名类,php,Php,当以这种方式生成对象并执行方法时,PHP会给出一个错误 class A { static public function b() { $o = new get_called_class(); // works $class = get_called_class(); $o = new $class; // works $o =

当以这种方式生成对象并执行方法时,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 '('
    }
}
为什么最后一行失败了


如何在一行中写入它?

不幸的是,您不能直接使用函数的返回值,但可以将其保存到变量中并使用变量。您还可以使用
静态
自身
常量

$class = get_called_class();
$o = (new $class())->method();
$o = (new static())->method();
$o = (new self())->method();

根本不可能。如果要使用实例,请将其存储在变量中

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();

其他线路也不起作用。您缺少
和未定义的类
get\u调用\u类
Ok,编辑。谢谢但这并不能解决问题:-(@MarkusZeller)我的问题都没有得到回答。我仍在寻找这两个问题的答案。答案是“如果你想使用实例,请将其存储在变量中。”