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

时间:2019-07-19 18:40:38

标签: php

以这种方式生成对象并执行方法时,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 '('
    }
}

为什么最后几行失败?

如何一行编写?

2 个答案:

答案 0 :(得分:1)

不幸的是,您不能直接使用函数的返回值来执行此操作,但是可以将其保存到变量中并使用该变量。您还可以使用staticself常量。

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