`
ruby8
  • 浏览: 207221 次
  • 性别: 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

    - **示例**:以Zend Framework为例,其中的FrontController就是一个很好的单例模式应用案例,用于管理全局配置信息。 ##### 2.3 便于调试与日志记录 - **集中处理日志**:在单个页面请求过程中,所有相关的代码...

    php单例模式实例

    结合上述步骤,我们创建了一个基本的PHP单例模式实现。在给定的`db.php`文件中,可能会包含一个利用单例模式管理数据库连接的类,如下所示: ```php class DBSingleton { private static $instance; private $pdo;...

    php单例模式和工厂模式

    PHP 中的单例模式主要用于限制类的实例化次数,确保全局范围内只有一个实例,常用于管理共享资源。工厂模式则关注于对象的创建,提供一个统一的入口,使得对象的创建与使用解耦。两者都是设计模式中的重要概念,能够...

    单例模式PHP实现代码类.zip

    - PHP单例模式实现的核心是控制构造函数的访问权限,使其私有(private),防止外部直接实例化。 - 定义一个私有的静态成员变量`$_instance`来存储类的实例。 - 提供一个公共的静态方法`getInstance()`,在第一次...

    PHP单例模式

    **PHP单例模式详解** 单例模式是一种设计模式,它在软件工程中被广泛使用,尤其是在PHP编程中。单例模式的主要目的是控制类的实例化过程,确保在整个应用程序中,对于某个类,只存在一个单一的实例。这种模式在资源...

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

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

    PHP 单例模式解析和实战

    在 PHP 开发中,单例模式是一种常见的设计模式,它限制一个类只能有一个实例。这样的设计模式在管理共享资源、控制对象生命周期或者在整个应用中保持一致状态时非常有用。本文将深入解析 PHP 单例模式的原理,并通过...

    php使用单例模式实现mysql类.zip

    在PHP编程中,单例模式是一种常见的设计模式,它确保一个类只有一个实例,并提供一个全局访问点。在数据库操作中,特别是在MySQL交互时,使用单例模式可以有效地管理数据库连接,避免频繁创建和关闭连接,从而提高...

    php设计模式之单例模式实例分析_.docx

    以下是一个简单的PHP单例模式实现: ```php class Singleton { private static $_instance; private function __construct() { // 构造函数的具体实现,例如数据库连接等 } public function __clone() { ...

    PHP单例模式访问数据库

    PHP中的单例模式是一种非常重要的设计模式,其主要目的是限制类的实例化过程,确保一个类在整个程序中只有一个实例存在。这在处理全局资源,如数据库连接时尤其有用,因为它可以避免创建多个数据库连接,浪费系统...

    Java单例模式应用研究.pdf

    Java单例模式应用研究 Java单例模式是一种最简单的创建型设计模式,主要用于对系统资源的管理与控制。在软件开发中大量使用,如Windows的文件系统、回收站、打印机等。 单例模式有三个特点: 1. 单例类只能有一个...

    php+mysql+jqury+ajax+mvc+单例模式事例

    单例模式通过控制类的实例化过程,保证在整个应用程序中只有一个实例存在。 结合以上知识点,"php+mysql+jqury+ajax+mvc+单例模式事例"是一个适合初学者的项目,它可能包含了一个简单的MVC框架,使用PHP处理后端...

    工厂模式与单例模式

    在软件设计模式中,工厂模式和单例模式是两种非常基础且重要的模式,它们都是用于解决对象创建问题,但有着不同的设计理念和应用场景。本篇文章将深入探讨这两种模式,并结合具体的代码示例`myFactoryDemo`进行讲解...

    php基于单例模式编写PDO类

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

    PHP5设计模式-单例模式

    单例模式是一种常用的设计模式,它在软件工程中扮演着控制类实例化过程的角色,确保一个类只有一个实例,并提供全局访问点。这种模式在PHP中尤其常见,特别是在需要频繁实例化然后销毁的对象,或者需要控制共享资源...

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

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

    单例模式分享-吴昌良

    #### 一、单例模式的核心概念及作用 单例模式(Singleton Pattern)是一种常用的软件设计模式,在PHP等编程语言中有着广泛的应用。此模式的核心在于确保一个类仅有一个实例,并提供一个全局访问点来获取这个实例。...

Global site tag (gtag.js) - Google Analytics