<?php
class LoveBase
{
protected static $_instance = NULL;
protected function __construct() {}
public static function app()
{
if(self::$_instance == NULL) {
self::$_instance = new self();
}
return self::$_instance;
}
public function get()
{
return 'LoveBase';
}
}
class Love extends LoveBase
{
public static function app()
{
if(self::$_instance == NULL) {
self::$_instance = new self();
}
return self::$_instance;
}
public function get()
{
return 'Love';
}
}
// Print "LoveLove" in this case(first case)
echo Love::app()->get();
echo LoveBase::app()->get();
// Print "LoveBaseLoveBase" in this case(second case)
// echo LoveBase::app()->get();
// echo Love::app()->get();
(对不起,我英语不好,希望你能说得通)
最佳答案
您定义了两个静态函数,它们都使用相同的静态变量 ($_instance) - 基类的静态成员也可以通过子类访问(只要它不是私有(private)的)。请记住,静态的东西(方法和变量)会被继承,但不会被克隆。
解决方案:将成员变量设为私有(private),并为每个类创建一个。
class LoveBase
{
private static $_instance = NULL;
// ...
class Love extends LoveBase
{
private static $_instance = NULL;
// ...
关于php - 扩展 PHP 中的单例类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11193902/