【问题标题】:Call a factory function of anonymous class调用匿名类的工厂函数
【发布时间】:2017-01-24 11:18:06
【问题描述】:

我想通过工厂函数实例化 anonymous class。可悲的是,我的幼稚方法在最后一行引发了解析错误Parse error: syntax error, unexpected 'class'

class Foo {
    static function factory() {
        return new static;
    }
}
(class extends Foo {})::factory();

这样的事情可能吗?还是有其他方法可以达到相同的目标?

【问题讨论】:

  • return new static() 带备份
  • new class extends...

标签: php static-methods php-7 anonymous-class


【解决方案1】:

两个问题:

  1. 您需要使用new class() 语法(即带大括号)返回静态

  2. 还需要使用new生成匿名类

代码:

class Foo {
    static function factory() {
        return new static();
    }
}
(new class extends Foo {})::factory();

【讨论】:

  • 这个类实例化了两次?所以工厂已经没有意义了(因为我可以直接使用第一个对象)?
  • 我同意 - 你编码的内容是毫无意义的。事实上,在您可以像这样创建类的静态副本之前,您只是获取了类名并创建了一个新类。不确定您要做什么,但我问这是一个更大示例的缩减版本,其中 foo 被进一步扩展,有静态属性(在这种情况下它会更有意义)所以我只是指出了解析错误你可以应用更完整的代码。
  • @Robbie 对不起,但为什么他必须带着大括号返回课堂?问题是他必须用 new 关键字实例化他的匿名。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-11
  • 2013-02-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多