分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 网页技术

php单例模式

发布时间:2023-09-06 01:19责任编辑:傅花花关键词:暂无标签

php单例模式

单例模式,是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中一个类只有一个实例。即一个类只有一个对象实例。

要点主要有三个:

1.一个类只能有一个对象;

2.必须是自行创建这个类的对象;

3,要想整个系统提供这一个对象;

从具体实现角度来说,就是以下三点:

一是单例模式的类只提供私有的构造函数,

二是类定义中含有一个该类的静态私有对象,

三是该类提供了一个静态的公有的函数用于创建或获取它本身的静态私有对象。

当然还要有一个private的clone方法,防止克隆;

优点

一、实例控制
单例模式会阻止其他对象实例化其自己的单例对象的副本,从而确保所有对象都访问唯一实例。
二、灵活性
因为类控制了实例化过程,所以类可以灵活更改实例化过程。
 

缺点

一、开销
虽然数量很少,但如果每次对象请求引用时都要检查是否存在类的实例,将仍然需要一些开销。可以通过使用静态初始化解决此问题。
二、可能的开发混淆
使用单例对象(尤其在类库中定义的对象)时,开发人员必须记住自己不能使用new关键字实例化对象。因为可能无法访问库源代码,因此应用程序开发人员可能会意外发现自己无法直接实例化此类。
三、对象生存期
不能解决删除单个对象的问题。在提供内存管理的语言中(例如基于.NET Framework的语言),只有单例类能够导致实例被取消分配,因为它包含对该实例的私有引用。在某些语言中(如 C++),其他类可以删除对象实例,但这样会导致单例类中出现悬浮引用。。(此处不是很懂,求解)
 
php单例代码演示:
 1 <?php ?2 //单例 3 class Uni{ 4 ????????//创建静态私有的变量保存该类对象 5 ????static private $instance; 6 ????????//参数 7 ????private $config; 8 ????????//防止直接创建对象 9 ????private function __construct($config){10 ????????$this -> config = $config;11 ????????????????echo "我被实例化了";12 ????}13 ????????//防止克隆对象14 ????private function __clone(){15 16 ????}17 ????static public function getInstance($config){18 ????????????????//判断$instance是否是Uni的对象19 ????????????????//没有则创建20 ????????if (!self::$instance instanceof self) {21 ????????????self::$instance = new self($config);22 ????????}23 ????????return self::$instance;24 ????????25 ????}26 ????public function getName(){27 ????????echo $this -> config;28 ????}29 }30 $db1 = Uni::getInstance(1);31 $db1 -> getName();32 echo "<br>";33 $db2 = Uni::getInstance(4);34 $db2 -> getName();35 ?>

运行结果:

我被实例化了1

1

$db1创建对象后,参数是1

$db2没有创建对象,而是直接使用$instance保存的唯一对象,所以输出的参数并没有变为4;

php单例模式

原文地址:http://www.cnblogs.com/wwjchina/p/7724271.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved