我想在父类中实现单例模式,结果却踩了一个坑!
直接上代码
class A
{
private static $instance;
private function __construct(){}
public static function getInstance(): static
{
if (null === static::$instance) {
static::$instance = new static();
}
return static::$instance;
}
}
class X extends A
{
}
class Y extends A
{
}
X::getInstance();
Y::getInstance();
Fatal error: Uncaught TypeError: A::getInstance(): Return value must be of type Y, X returned in C:\Users\Administrator\Desktop\test.php:17
Stack trace:
#0 C:\Users\Administrator\Desktop\test.php(33): A::getInstance()
#1 {main}
thrown in C:\Users\Administrator\Desktop\test.php on line 17
可以这样写: