PHP

php设计模式(一)----单例模式

Royal
2022-04-09 / 0 评论 / 242 阅读 / 正在检测是否收录...

应用场景:

  • 数据库连接这种比较耗费资源的操作;
  • 我们希望整个应用只实例化一个;

结构:

4私1公或者3私一公(私有化重建方法非必须)

  1. 私有化构造方法: 防止使用 new 创建多个实例;
  2. 私有化克隆方法: 防止 clone 多个实例;
  3. 私有化重建方法: 防止反序列化;
  4. 私有化静态属性: 防止直接访问存储实例的属性;
  5. 公有化静态方法。

代码实现:

class Singleton
{
    //创建静态私有的变量保存该类对象
    static private $instance;

    //防止使用new直接创建对象
    private function __construct(){

    }

    //防止使用clone克隆对象
    private function __clone(){

    }

    //防止反序列化
    private function __wakeup(){
    
    }

    static public function getInstance()
    {
        //判断$instance是否是Singleton的对象,不是则创建
        if (!self::$instance instanceof self) {
            self::$instance = new self();
        }
        return self::$instance;
    }

    public function test()
    {
        echo "我是一个单例模式";
    }
}

$sing = Singleton::getInstance();
$sing->test();
$sing2 = new Singleton(); //Fatal error: Uncaught Error: Call to private Singleton::__construct() from invalid context in
$sing3 = clone $sing; //Fatal error: Uncaught Error: Call to private Singleton::__clone() from context
1

评论

博主关闭了当前页面的评论