首页 > php教程 > php手册 > 正文

php单件模式的简单例子

php中文网
发布: 2016-06-21 09:04:55
原创
1411人浏览过

单件模式即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-&gt;__fp = @fopen('application.log', 'ab+')){<br>            $this-&gt;__errMsg = '创建或读取日志文件失败';<br>            $this-&gt;__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-&gt;__errMsg);<br>    }<br>    #将指定内容写入到日志文件中<br>    public function inLog($temp){<br>        if(@fwrite($this-&gt;__fp, time()."|||".$temp."\r\n") === FALSE){<br>            $this-&gt;__errMsg = '写入到日志文件失败';<br>            $this-&gt;__errorHandler();<br>        }<br>        return;<br>    }<br>    #将日志内容输出,参数默认为1,即默认用类内部方法打印日志,否则可自定义显示方式.两种情况下都返回数组<br>    public function outLog($default = 1){<br>        $outArray = array();<br>        while(!feof($this-&gt;__fp)){<br>            $line = fgets($this-&gt;__fp);<br>            if(strlen($line) != 0){<br>                $tmp = explode("|||", $line, 2);<br>                $outArray[] = $tmp;<br>            }            <br>        }<br>        if($default == 1){<br>            $this-&gt;__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>?&gt;附上测试文件

代码:
<?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()-&gt;inLog($e-&gt;getMessage());<br>}<br>?&gt;



PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号