PHP单例模式之抽象类

  • 构造函数一定要声明为 private
  • $_instance一定要声明为 private static
  • __clone 一定要定义且private,防止clone;
  • getInstance()一定要声明为public static;
  • 抽象类中的抽象方法,子类必须重写testFunction()
abstract class SingletonBase
{

    public $table = 'bar';
    private static $_instance;

    private function __construct()
    {
        echo 'this is the private parent construct';
    }

    public static function getInstance($className)
    {
        if (!self::$_instance instanceof self) {
            self::$_instance = new $className();
        }
        self::$_instance->testFunction();
        return self::$_instance;
    }

    abstract function testFunction();

    private function __clone()
    {
        trigger_error('Clone is not allow!', E_USER_ERROR);
    }
}

class SingletonFoo extends SingletonBase
{

    public $table = 'foo';

    public static function getInstance()
    {
        return parent::getInstance(__CLASS__);
    }

    public function testFunction()
    {
        echo 'test function</p>';
    }
}

$st = SingletonFoo::getInstance();
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,899评论 18 399
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,323评论 19 139
  • 前言 本文主要参考 那些年,我们一起写过的“单例模式”。 何为单例模式? 顾名思义,单例模式就是保证一个类仅有一个...
    tandeneck阅读 7,222评论 1 8
  • 对象的创建与销毁 Item 1: 使用static工厂方法,而不是构造函数创建对象:仅仅是创建对象的方法,并非Fa...
    孙小磊阅读 6,197评论 0 3
  • 1 场景问题# 1.1 读取配置文件的内容## 考虑这样一个应用,读取配置文件的内容。 很多应用项目,都有与应用相...
    七寸知架构阅读 11,775评论 12 68