PHP如何实现一个单例

  1. 申请一个私有的静态成员变量来保存该类的唯一实例
  2. 声明私有的构造方法,防止类外部创建对象
  3. 声明一个静态公共方法,供外部获取唯一实例

这三步走完,就是一个单例了,但是这个单例是不安全的,想要这个单例安全,还需以下两步(如有不完善还请补充)

  1. 声明私有的克隆方法,防止对象被克隆
  2. 重写__sleep方法,将返回置空,防止序列化反序列化获得新的对象
<?php
/**
 * 单列模式(防止对象克隆、对象序列化反序列化)
 * Created by PhpStorm.
 * User: Jeaforea
 * Date: 2019/3/14
 * Time: 17:56
 */

namespace Kanshenmekan\Buzhunkan\Zaikandasini;

class SetSingleton{

    private static $new; //申请一个私有的静态成员变量来保存该类的唯一实例

    private function __construct() {} //声明私有的构造方法,防止类外部创建对象

    public static function instance () { //声明一个静态公共方法,供外部获取唯一实例
        if (!(self::$new instanceof self)) {
            self::$new = new self;
        }
        return self::$new;
    }

    private function __clone() {} //声明私有的克隆方法,防止对象被克隆

    public function __sleep() { //重写__sleep方法,将返回置空,防止序列化反序列化获得新的对象
        return [];
    }
}
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值