|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
培训的第二阶段,开始了PHP语言语法结构和应用的学习。
之前讲到过关于异常的处置机制,最好可以自界说异常,假如debug翻开,那末显示详细的调试信息,假如debug封闭,那末将异常纪录到日记,然后跳转到毛病页,这节课我就次要来说一下这个异常处置机制。
如今咱们界说一个异常的基类,在Toper中为Tp_Exception,在这儿,我就直接叫BaseException吧,那BaseException.php一定起首是有一个架子的:
1 <?php 2 class BaseException extends Exception { 3 public function printStack() { 4 5 } 6 public function __toString() { 7 8 } 9 }
最基本的,这个类一定要承继自Exception,然后我需求完成__toString办法和别的一个自界说的printStack办法,完成__toString办法的缘由是常常咱们会直接throw new Exception() 这类体例抛出异常,它会直接挪用__toString()办法,挪用printStack办法就是输入仓库信息。
说一下思绪,起首这两个办法咱们都需求剖断是不是是debug形式,假如是debug形式,那末很easy,直接输入便可,不然,跳转到毛病页,然而跳转之前,必需要将异常信息写入到日记文件中去。
能够人人注重到,不论是__toString仍是printStack假如debug封闭,都需求纪录调试信息到日记文件,所以咱们需求起首编写一个帮助函数:
1 protected function _toLogFile($str) { 2 file_put_contents(APP_PATH . '/log',$str,FILE_APPEND); 3 } 这儿,为了简捷,我就直接利用file_put_contents了,这个函数功效很壮大啊,我出格喜好~~
因为到今朝还没有讲URL重定向,转发恳求等,临时就直接显示毛病页,所以又需求有一个帮助函数:
1 protected function _outputErrorPage() { 2 header("content-type:text/html"); 3 echo file_get_contents(APP_PATH . '/error.html'); 4 } 由于请求代码复杂,所以毛病页和日记文件都直接写逝世到项目根目次中,假如你有乐趣,可以本人试着将途径写在设置装备摆设文件中,这个也不是很难的。
因为帮助函数已写完,所以其他两个函数就很easy了:
1 public function printStack() { 2 if(true === C('debug')) { 3 echo parent::getTraceAsString(); 4 } else { 5 $this->_toLogFile(parent::getTraceAsString()); 6 $this->_outputErrorPage(); 7 } 8 }
1 public function __toString() { 2 if(true !== C('debug')) { 3 $this->_toLogFile(parent::getTraceAsString()); 4 $this->_outputErrorPage(); 5 exit(); 6 } 7 return parent::__toString(); 8 }
固然,因为__toString要前往字符串,而一旦throw一个异常,就会直接显示出来异常信息,为了在debug封闭以后不在页面显示异常信息,所以就直接在此处exit了,固然,我今朝没有想到一个更好的举措,所以建议利用printStack来做。
我这个异常类就是用来抛砖引玉的,所以假如你有甚么好的办法,请和我多多交换,相互进修,相互生长。
固然,如今只是界说了一个异常处置的基类,前面会写良多关于异常的子类,真正利用的时分是挪用其子类的。
学校并没有那么多的时间可以让我们在实际开发上面。 |
|