`
ruby8
  • 浏览: 201877 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

PHP单例模式及应用实例

    博客分类:
  • PHP
阅读更多

单例模式顾名思义,就是只有一个实例。

作为对象的创建模式, 单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,

这个类我们称之为单例类。

单例模式的要点有三个:

一是某个类只能有一个实例;

二是它必须自行创建这个实例;

三是它必须自行向整个系统提供这个实例。

下面我们讨论下为什么要使用PHP单例模式?

多数人都是从单例模式的字面上的意思来理解它的用途, 认为这是对系统资源的节省, 可以避免重复实例化, 是一种"计划生育".   而PHP每次执行完页面都是会从内存中清理掉所有的资源. 因而PHP中的单例实际每次运行都是需要重新实例化的, 这样就失去了单例重复实例化的意义了. 单单从这个方面来说, PHP的单例的确有点让各位失望. 但是单例仅仅只有这个功能和应用吗? 答案是否定的,我们一起来看看。

1. php的应用主要在于数据库应用, 所以一个应用中会存在大量的数据库操作, 在使用面向对象的方式开发时(废话), 如果使用单例模式, 则可以避免大量的new 操作消耗的资源。

2. 如果系统中需要有一个类来全局控制某些配置信息, 那么使用单例模式可以很方便的实现. 这个可以参看zend Framework的FrontController部分。

3. 在一次页面请求中, 便于进行调试, 因为所有的代码(例如数据库操作类db)都集中在一个类中, 我们可以在类中设置钩子, 输出日志,从而避免到处var_dump, echo。

 

<?php 

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


class People 
{ 
static private $_instance = NULL; 

public $height = ''; 

public $age = ''; 

private function __construct() 
{ 
$this->height = '185'; 
$this->age = 25; 
} 

private function __clone() 
{ 
//do something 
} 

static public function getInstance() 
{ 
if(!self::$_instance instanceof self) 
{ 
//echo 'lgh-big'; 
self::$_instance = new self; 
} 
else 
{ 
//for testing only 
//echo 'gdc-xiaoairener'; 
} 

return self::$_instance; 
} 

public function getHeight() 
{ 
echo $this->height; 
} 


public function getAge() 
{ 
echo $this->age; 
} 
} 


function testInstance() 
{ 
People::getInstance()->getAge(); 
} 


//begin to use the class 

$lgh = People::getInstance(); 
$lgh->getHeight(); 

echo '<br />'; 
testInstance(); 

?>

 

分享到:
评论
2 楼 sefcertyu 2012-11-24  
不错,还是iteye的文章比较实在,有质量;找了半天还是这篇文章涉及面广
1 楼 jerrymsj 2011-02-17  
顶下了。。。。

相关推荐

    为什么要使用PHP单例模式及应用实例.docx

    为什么要使用PHP单例模式及应用实例.docx为什么要使用PHP单例模式及应用实例.docx

    PHP单例模式详解及实例代码

    PHP单例模式详解 单例模式的概念 单例模式是指整个应用中某个类只有一个对象实例的设计模式。具体来说,作为对象的创建方式,单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统全局的提供这个实例。它...

    php基于单例模式编写PDO类

    引入了单例模式来保证在全局调用中不会重复实例化这个类,降低系统资源的浪费,一个对象...php的应用主要在于数据库应用, 所以一个应用中会存在大量的数据库操作, 使用单例模式, 则可以避免大量的new 操作消耗的资源。

    PHP单例设计模式,连接多数据库源码

    2: 缩小命名空间 单例模式是对全局变量的一种改进,它避免了那些存储唯一实例的全局变量污染命名空间. 3: 允许对操作和表示的精华 单例类可以有子类. 而且用这个扩展类的实例来配置一个应用是很容易的,你可以用你所...

    设计模式—— 七 :单例模式

    单例模式是23个模式中比较简单的模式,应用也非常广泛 什么是单例模式? 单例模式的定义: Ensure a class has only one instance, and provide a global point of access to it.(确保某一个类 只有一个实例...

    基于php设计模式中单例模式的应用分析

    通过instanceof操作符可以检测到此类是否已经被实例化] 注:需要创建__clone()方法防治对象被复制作用: 1.php的应用主要用于数据库,所以一个应用中会存在大量的数据库操作,使用单例模式,则可以避免大量new操作...

    PHP单例模式定义与使用实例详解

    本文实例讲述了PHP单例模式定义与使用。分享给大家供大家参考,具体如下: 先简单的介绍一下单例模式。单例模式就是在应用程序中保持某一个类实例只存在一个,而且不可以受外部环境的影响而生成这个类的第二个实例。...

    PHP单例模式详细介绍

    单例模式是指整个应用中某个类只有一个对象实例的设计模式。具体来说,作为对象的创建方式,单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统全局的提供这个实例。它不会创建实例副本,而是会向单例类...

    php单例模式详细介绍及实现

    这篇文章主要介绍了PHP中数据库单例模式的...为什么要使用PHP单例模式? 1、php的应用主要在于数据库应用、所以一个应用中会存在大量的数据库操作、使用单例模式、则可以避免大量的new 操作消耗的资源 2、如果系统中

    PHP实现单例模式建立数据库连接的方法分析

    理解php单例模式 一、什么是单例 wiki百科:单例模式,也叫单子模式,是一种常用的软件设计模式。 在应用这个模式时,单例对象的类必须保证只有一个实例存在。 许多时候整个系统只需要拥有一个的全局对象,这样有利...

    php基于单例模式编写PDO类.zip

    引入了单例模式来保证在全局调用中不会重复实例化这个类,降低系统资源的浪费,一个对象... php的应用主要在于数据库应用, 所以一个应用中会存在大量的数据库操作, 使用单例模式, 则可以避免大量的new 操作消耗的资源。

    PHP单例模式应用示例【多次连接数据库只实例化一次】

    本文实例讲述了PHP单例模式应用。分享给大家供大家参考,具体如下: 以前刚开始工作的时候经常连接数据库,每次用到数据库的时候就要用new进行实例并连接一次,当时因为连接数据库的次数不是很频繁,所以也没什么。...

    鸡肋的PHP单例模式应用详解

    单例模式的要点有三个:一是某个类只能有一个实例;二是它必须自行创建这个实例;三是它必须自行向整个系统提供这个实例。复制代码 代码如下:&lt;?php /* 单例模式举例,其要点如下: * * 1. $_instance 必须声明为...

    PHP设计模式之单例模式入门与应用详解

    本文实例讲述了PHP设计模式之单例模式入门与应用。分享给大家供大家参考,具体如下: 单例模式,是一种常用的软件设计模式,在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中一个类只有一...

    PHP中常用的三种设计模式详解【单例模式、工厂模式、观察者模式】

    为何要使用PHP单例模式? 多数人都是从单例模式的字面上的意思来理解它的用途, 认为这是对系统资源的节省, 可以避免重复实例化, 是一种”计划生育”. 而PHP每次执行完页面都是会从内存中清理掉所有的资源. 因而PHP中...

    php实现设计模式中的单例模式详解

    2、缩小命名空间 单例模式是对全局变量的一种改进。它避免了那些存储唯一实例的全局变量污染命名空间 3、允许对操作和表示的精华 单例类可以有子类。而且用这个扩展类的实例来配置一个应用是很容易的。你可以用你所...

    学习php设计模式 php实现单例模式(singleton)

    单例模式有三个特点: 1、一个类只有一个实例 2、它必须自行创建这个实例 3、必须自行向整个系统提供这个实例 一、单例模式结构图 二、单例模式中主要角色 Singleton 定义一个Instance操作,允许客户访问它的唯一...

    php面向对象值单例模式

    单例模式(职责模式): 简单的说,一个对象(在学习设计模式之前,需要比较了解面向对象思想)只负责一个特定的任务;...为什么要使用PHP单例模式? 1、php的应用主要在于数据库应用, 所以一个应用中

Global site tag (gtag.js) - Google Analytics