我有一个带有受保护的构造函数的类,以确保仅通过工厂方法实例化它:
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
语法声明了并实例化了匿名类。
是否可以只声明一个匿名类而不同时实例化它?