声明一个匿名类而不实例化它

时间:2019-05-12 19:31:43

标签: php

我有一个带有受保护的构造函数的类,以确保仅通过工厂方法实例化它:

class Klass {
  protected static $instance;

  protected function __construct() {}

  public static function getInstance() {
    if (!isset(self::$instance))
      self::$instance = new static();

    return self::$instance;
  }
}

现在,因为我喜欢使用一些新颖的功能,所以我想创建此类的匿名子类:

$k = (new class extends Klass {
  public static function forUnitTest() {
    $instance = new static;
    return $instance;
  }
})::forUnitTest();

当然会导致错误:

  

从上下文“ KlassTest”调用受保护的Klass :: __ construct()

这是因为new class语法声明了实例化了匿名类。

是否可以只声明一个匿名类而不同时实例化它?

0 个答案:

没有答案