php单件模式的简单例子

单件模式即singleton pattern(属于创建型设计模式),最适合解释的例子就是日志记录了.
其他模式的php代码以后写好了在分享给大家,希望可以增加点大家对php中设计模式的概念.
复制内容到剪贴板

代码:

<?php
/*
* 1.Singleton Pattern for the log of application
* 2.建议将类文件名写成class.log.php
* 以便__autoload()自动载入该类
* 3.Author:NoAngels
* 4.E-mail:flare_1023@163.com QQ:82535599
*/
final class log{
    #构造函数,日志文件不存在就创建否则就打开文件以供后续使用
    private function __construct(){
        if(!$this->__fp = @fopen('application.log', 'ab+')){
            $this->__errMsg = '创建或读取日志文件失败';
            $this->__errorHandler();
        }
    }
    #析构函数,释放资源
    function __destruct(){
        #站位先
    }
    #静态函数,配合静态变量使用,实现singleton设计模式
    static function getInstance(){
        if(self::$__instance == NULL){
            self::$__instance = new log;
        }
        return self::$__instance;
    }    
    #类内部错误处理机制
    private function __errorHandler(){
        die($this->__errMsg);
    }
    #将指定内容写入到日志文件中
    public function inLog($temp){
        if(@fwrite($this->__fp, time()."|||".$temp."\r\n") === FALSE){
            $this->__errMsg = '写入到日志文件失败';
            $this->__errorHandler();
        }
        return;
    }
    #将日志内容输出,参数默认为1,即默认用类内部方法打印日志,否则可自定义显示方式.两种情况下都返回数组
    public function outLog($default = 1){
        $outArray = array();
        while(!feof($this->__fp)){
            $line = fgets($this->__fp);
            if(strlen($line) != 0){
                $tmp = explode("|||", $line, 2);
                $outArray[] = $tmp;
            }            
        }
        if($default == 1){
            $this->__printLog($outArray);        
        }
        return $outArray;            
    }
    #默认日志输出方式
    private function __printLog($arr){
        foreach($arr as $temp){
            echo '记录时间:'.date('Y-m-d H:m:s' , $temp[0]).'<br/>原因:'.$temp[1].'<br/>';
        }        
    }
    #私有变量,初始化每个变量
    static private $__instance = NULL;
    private $__fp = NULL;
    private $__errMsg = '';
}
?>
附上测试文件

代码:

<?php
try{
    if(!@mysqli_connect('localhost', 'root', '10d237776')){
        throw new Exception('mysql connect failed!');
    }
}
catch(Exception $e){
    print 'y';
    log::getInstance()->inLog($e->getMessage());
}
?>

时间: 2025-01-28 10:32:01

php单件模式的简单例子的相关文章

discuz X的单件模式

X的只要文件开头都有这么一句话  代码如下 复制代码 $discuz = & discuz_core::instance(); [code language=php]   // instance()属于discuz_core类在class_core.php function &instance() { static $object; if(empty($object)) {   $object = new discuz_core(); } return $object; } [/code]

.NET简谈设计模式之(单件模式)

我们继续学习设计模式系列文章. 今天要讲的是单件模式,其实单件模式是比较简单的设计模式,在我们日常开发过程中也是经常用到的. 单件模式:单件模式是一种用于确保整个应用程序中只有一个类实例且这个实例所占资源在整个应用程序中是共享时的程序设计方法. 我想如果初学者对一些基本概念能熟练掌握时,其实单件模式是很简单的,就是因为初学者对一些概念还不是很理解,我们先来扫除这些阻挡我们理解的障碍. 大部分的初学者都会搞不清楚"静态对象"与"实例对象"的区别.当然谁都有一个过渡期,

设计模式应用实例之单件模式应用,和简单注入实现形式

上次写了基于MVC模式和Command模式构建系统架构,也做了一个简单的实例. 在把我想写的写完以后,我想通过一个具体的项目来串联大部分的设计模式思想. 今天我想说的是单件模式. 首先简单介绍下单件模式是什么东西,也称Singleton模式,实现单一实例的功能,不具体说了,不了解者看别的介绍概念性文章. 通常,在我做过的项目中,应用Singleton最多的就是做适配器,下面我会介绍如何做适配器. 先介绍通过通过单件模式,实现适配器产生单一实例的应用过程. 在介绍单件模式以前,我想先介绍下,面向服

.NET中的设计模式二:单件模式

设计 单件模式(Singleton)是一个非常简单的模式,这是我第一个理解并且能运用的模式.有时候模式的复杂程度并不在于本身,而是由于他的应用目的.最初的时候面对一个模式经常充满了困惑,一个简单的调用为什么要搞的如此复杂?为什么要建立这么多类,只是为了打开一个文件. 通常说来学习一个模式是一个接受.认可.领会的过程.接受:了解模式的结构,了解实例的意义:认可:认可该模式在实际工程中的作用和可行性:领会:将模式应用到开发过程中. 而模式的应用目的说到底无非是为了降低模块之间在时间和空间上的耦合程度

PHP设计模式介绍Ⅳ单件模式

  几乎所有面向对象的程序中,总有一两个资源被创建出来,在程序应用中持续被共享使用.例如,这样的一个资源,在一个电子商务程序的数据库连接中使用:这个连接在应用程序启动时初始化,程序于是可以有效的执行;当程序结束时,这个连接最终被断开并销毁.如果是你写的代码,没必要在每时每刻创建一个数据库连接,这样非常低效.已经建立好的连接应该能被你的代码简单重复的使用.这个问题就是,基于以上要求你将如何进行这个数据库连接?(或者连接其它被循环使用的唯一资源,比如一个开放文件或者一个队列.) 问题 你怎样确保一个

设计模式(二)单件模式Singleton(创建型)

SINGLETON(单件)-对象创建型模式        几乎所有面向对象的程序中,总有一些类的对象需要是唯一的,例如,通过数据库句柄到数据库的连接是独占的.您希望在应用程序中共享数据库句柄,因为在保持连接打开或关闭时,它是一种开销.再如大家最经常用的IM,如QQ,在同一台电脑,一个帐号只能有唯一的登录. 1. 问题 怎样确保一个特殊类的实例是独一无二的(它是这个类的唯一实例),并且这个实例易于被访问呢? 2. 解决方案 1)全局变量:一个全局变量使得一个对象可以被访问,但它不能防止你实例化多个

.NET设计模式:单件模式(Singleton Pattern)

概述 Singleton模式要求一个类有且仅有一个实例,并且提供了一个全局的访问点.这就提出了一个问题:如何绕过常规的构造器,提供一种机制来保证一个类只有一个实例?客户程序在调用某一个类时,它是不会考虑这个类是否只能有一个实例等问题的,所以,这应该是类设计者的责任,而不是类使用者的责任. 从另一个角度来说,Singleton模式其实也是一种职责型模式.因为我们创建了一个对象,这个对象扮演了独一无二的角色,在这个单独的对象实例中,它集中了它所属类的所有权力,同时它也肩负了行使这种权力的职责! 意图

.NET设计模式-单件模式(Singleton Pattern)

单件模式(Singleton Pattern) --.NET设计模式系列之二 Terrylee,2005年12月07日 概述 Singleton模式要求一个类有且仅有一个实例,并且提供了一个全局的访问点.这就提出了一个问题:如何绕过常规的构造器,提供一种机制来保证一个类只有一个实例?客户程序在调用某一个类时,它是不会考虑这个类是否只能有一个实例等问题的,所以,这应该是类设计者的责任,而不是类使用者的责任. 从另一个角度来说,Singleton模式其实也是一种职责型模式.因为我们创建了一个对象,这

艾伟_转载:.NET设计模式:单件模式(Singleton Pattern)

概述 Singleton模式要求一个类有且仅有一个实例,并且提供了一个全局的访问点.这就提出了一个问题:如何绕过常规的构造器,提供一种机制来保证一个类只有一个实例?客户程序在调用某一个类时,它是不会考虑这个类是否只能有一个实例等问题的,所以,这应该是类设计者的责任,而不是类使用者的责任. 从另一个角度来说,Singleton模式其实也是一种职责型模式.因为我们创建了一个对象,这个对象扮演了独一无二的角色,在这个单独的对象实例中,它集中了它所属类的所有权力,同时它也肩负了行使这种权力的职责! 意图