> php教程 > php手册 > 본문

php单件模式的简单例子

WBOY
풀어 주다: 2016-06-21 09:04:55
원래의
1276명이 탐색했습니다.

单件模式即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>?>



관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 추천
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿