• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

php单件模式的简单例子_php

php 搞代码 7年前 (2018-06-21) 201次浏览 已收录 0个评论
单件模式即singleton pattern(属于创建型设计模式),最适合解释的例子就是日志记录了.
其他模式的php代码以后写好了在分享给大家,希望可以增加点大家对php中设计模式的概念.

复制内容到剪贴板

代码:

<?php
/*
* 1.Singleton Pattern for the log of application
* 2.建议将类文件名写成class.log.php
* 以便__autoload()自动载入该类
* 3.Author:NoAngels
* 4.E-mail:[email protected] 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());
}
?>

欢迎大家阅读《php单件模式的简单例子_php》,跪求各位点评,若觉得好的话请收藏本文,by 搞代码


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:php单件模式的简单例子_php
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址