PHP:使用函数结果创建匿名类
当以这种方式生成对象并执行方法时,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 =
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)我的问题都没有得到回答。我仍在寻找这两个问题的答案。答案是“如果你想使用实例,请将其存储在变量中。”