搜索
首页php教程php手册php单件模式的简单例子

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

复制内容到剪贴板

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

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



声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热工具

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )专业的PHP集成开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

将Eclipse与SAP NetWeaver应用服务器集成。

EditPlus 中文破解版

EditPlus 中文破解版

体积小,语法高亮,不支持代码提示功能

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中