php单例模式定义,php单例模式

1,什么是单例模式

作为对象的创建模式,单例模式确保某一个类只有一个实例,并且对外提供这个全局实例的访问入口。它不会创建实例副本,而是会向单例类内部存储的实例返回一个引用。

2,单例模式的特点

三私一公:私有的静态变量(存放实例),私有的构造方法(防止创建实例),私有的克隆方法(防止克隆对象),公有的静态方法(对外界提供实例)

3,单例模式三要素

只能有一个实例,必须拥有一个构造函数,并且必须被标记为private

必须自行创建这个实例,拥有一个保存类的实例的静态成员变量

必须提供一个访问这个实例的公共静态方法,从而返回唯一实例的一个引用。

4,单例模式的优势

使用单例模式的好处很大,以数据库操作为例。若不采用单例模式,当程序中出现大量数据库操作时,每次都要执行new操作,

每次都会消耗大量的内存资源和系统资源,而且每次打开和关闭数据库连接都是对数据库的一种极大考验和浪费。使用了单例模式,只需要实例化一次,不需要每次都执行new操作,极大降低了资源的耗费。

5,单例模式示例

以Redis为例

class Redis

{

public $redis = "";

protected $options = [

'host' => '127.0.0.1',

'port' => 6379,

'password' => '',

'select' => 0,

'timeout' => 0,

'expire' => 0,

'persistent' => false,

'prefix' => '',

'serialize' => true,

];

private static $_instance;

//构造器私有化:禁止从类外部实例化

private function __construct() {

$this->redis = new \Redis();

$result = $this->redis->connect($this->options['host'], $this->options['port'], $this->options['timeout']);

if($result === false) {

throw new \Exception('redis connect error');

}

}

//克隆方法私有化:禁止从外部克隆对象

private function __clone(){}

//单例访问统一入口

public static function getInstance(){

//判断实例有无创建,没有的话创建实例并返回,有的话直接返回

if(!(self::$instance instanceof self)){

self::$instance = new self();

}

return self::$instance;

}

/**

* 取值

* @param $key

* @return bool|string

*/

public function get($key) {

if(!$key) {

return '';

}

return $this->redis->get($key);

}

}

6,控制器调用

use test\Redis;

class Index

{

public function index()

{

echo Redis::getInstance()->get("key");

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值