某些应用程序资源是独占的,因为有且只有一个此类型的资源。例如,通过数据库句柄到数据库的连接是独占的。您希望在应用程序中共享数据库句柄,因为在保持连接打开或关闭时,它是一种开销,在获取单个页面的过程中更是如此。

单元素模式可以满足此要求。如果应用程序每次包含且仅包含一个对象,那么这个对象就是一个单元素(Singleton)。清单 3 中的代码显示了 PHP V5 中的一个数据库连接单元素。

在程序中,只允许出现一个该对象

class Single
{
public $dbName;
private static $instance = null; private function __construct()
{
echo "hello singe<br/>";
} function __destruct()
{
echo "see you tomorrow<br/>";
} public static function getInstance()
{
if(!self::$instance instanceof self){
self::$instance = new Single();
}
return self::$instance;
} public static function freeSelf()
{
self::$instance = null;
} public function printInfo()
{
echo "this is a single<br/>";
} public function printName()
{
echo "this is a name<br/>";
} public function setDbName($dbName)
{
$this->dbName = $dbName;
} public function getDbName()
{
return $this->dbName;
}
}
$a = Single::getInstance();
$a->setDbName("hello");
echo $a->getDbName()."<br/>";

要点:
 1. $instance必须声明为静态的私有变量 
 2. 构造函数和克隆函数必须声明为私有的,这是为了防止外部程序 new 类从而失去单例模式的意义 
 3. getInstance()方法必须声明为公有的,必须调用此方法以返回唯一实例的一个引用 
 4. ::操作符只能访问静态变量或静态函数 
 5. PHP的单例模式是相对而言的,因为PHP的解释运行机制使得每个PHP页面被解释执行后,所有的相关资源都会被回收。 
  也就是说,PHP在语言级别上没有办法让某个对象常驻内存。在PHP中,所有的变量都是页面级的,无论是全局变量, 
  还是类的静态成员,都会在页面执行完毕后被清空,结果会重新建立新的对象,这样也就完全失去了Singleton的意义。 
  不过,在实际应用中同一个页面中可能会存在多个业务逻辑,这时单例模式就起到了很重要的作用,有效的避免了重复

最新文章

  1. 三维场景中使用BillBoard技术
  2. 编写Java应用程序。首先,定义描述学生的类——Student,包括学号(int)、 姓名(String)、年龄(int)等属性;二个方法:Student(int stuNo,String name,int age) 用于对对象的初始化,outPut()用于输出学生信息。其次,再定义一个主类—— TestClass,在主类的main方法中创建多个Student类的对象,使用这些对象来测 试Stud
  3. asp.net mvc 入门资料
  4. 深入理解python之self
  5. angularjs transclude demo
  6. ProcMon启用调试符
  7. [转载]Android利用convertView优化ListView性能
  8. Visual Studio 2010 中的 Web 开发
  9. HDU1073:Online Judge
  10. Nexus3 配置3
  11. .net 调用java service 代理类方法
  12. 三种dedecms友情链接调用标签
  13. JDBC 关闭数据库连接与自动提交【转】
  14. 包建强的培训课程(11):iOS Runtime实战
  15. Kafka Topic Api
  16. Qt 获取屏幕信息
  17. MacOS下IntelliJ IDEA关联JDK1.8源码
  18. Elasticsearch入门,这一篇就够了
  19. 微信小程序一些demo链接地址
  20. Linux 学习手记(2):Linux文件系统的基本结构

热门文章

  1. webrtc 学习资源 http://www.cnblogs.com/lingyunhu/p/3578218.html
  2. 快速沃尔什变换(FWT)学习笔记 + 洛谷P4717 [模板]
  3. 三 vue学习三 从读懂一个Vue项目开始
  4. Lecture 0 --基本说明
  5. 3.4-3.6 依据业务需求分析HBase的表设计
  6. 1.1-1.5 flume架构概述及安装使用
  7. 1.11-1.12 Sqoop导入数据时两种增量方式导入及direct
  8. apk重签名的两种方法
  9. springboot2 -广播式WebSocket
  10. su和sudo命令的用法