接着完善本身的PHP框架,本次更新的主要内容有:php
异常处理:异常处理是编程语言或计算机硬件里的一种机制,用于处理软件或信息系统中出现的异常情况(即超出程序正常执行流程的某些特殊条件)html
异常处理用于处理程序中的异常情况,虽然说是“异常状态”,但仍然仍是在程序编写人员的预料之中,其实程序的异常处理彻底能够用‘if else’语句来代替,但异常处理天然有其优点之处。git
我的总结其优势以下:github
虽然将代码放在try catch块中会有微微的效率差,可是跟这些优势一比,这点消耗就不算什么了。那么PHP的异常处理怎么使用呢?web
PHP内置有Exception类,使得咱们能够经过实例化异常类来抛出异常。咱们将代码放在try语句中执行,并在其后用catch试图捕捉到在try代码块中抛出的异常,并对异常进行处理。咱们还能够在catch代码段后使用finally语句块,不管是否有异常都会执行finally代码块的代码,try catch语句形以下面代码:编程
try{ throw new Exeption('msg'[,'code',$previous_exeception]); }catch(Exeption $var) { process($var); }catch(MyException $e){ process($e) }finally{ dosomething(); }
使用try catch语句,须要注意:canvas
说了那么多异常相关(固然解释这些也是为了能理解和使用框架),那么框架里要怎么实现呢?数组
咱们能够重写异常类,完善其内部方法:ruby
<?php class Exception { protected $message = 'Unknown exception'; // 异常信息 protected $code = 0; // 异常代码 protected $file; // 发生异常的文件名 protected $line; // 发生异常的代码行号 function __construct($message = null, $code = null,$previous_exeception = null); final function getMessage(); // 返回异常信息 final function getCode(); // 返回异常代码 final function getFile(); // 返回发生异常的文件名 final function getLine(); // 返回发生异常的代码行号 final function getTrace(); // 返回异常trace数组 final function getTraceAsString(); // 返回异常trace信息 /** * 记录错误日志 */ protected function log(){ Logger::debug(); } }
如上,final方法是不能够重写的,除此以外,咱们能够定义本身的方法,如记录异常日志,像我自定义的log方法,在catch代码块中,就能够直接使用$e->log
来记录一个异常日志了。yii2
咱们可使用set_exception_handler('exceptionHandler')来全局捕获没有被catch块捕获到的异常,此异常处理函数须要传入一个异常处理对象,这样能够分析此异常处理信息,避免系统出现不人性化的提示,加强框架的健壮性。
function exceptionHandler($e) { echo '有未被捕获的异常,在' . $e->getFile() . "的" . $e->getLine() . "行!"; }
顺便再说一下其余的全局处理函数:
可是要注意这些全局函数须要在代码段的前面已经定义过再注册。
初次使用yii2的ActivceRecord类以为好方便,只须要定义其字段同名属性再调用save方法就OK了(好神奇啊),它是怎么实现的呢,看了下源码,明白了其大体实现过程(基类)。
$row['KEY'] == 'PRI'
)信息,保存时看是否有主键信息,若存在,则为更新;不存在,则插入。感受很久没写博客了,‘毕业’对于一个相似专科学习方式的人来讲是有些繁琐了,保存好对学校的留恋,继续出发。
真是越学习越以为本身认识不够,在看一些PHP框架源码时,有时候会感受本身还差得很远,那种总体感和布局感,估计须要时间和经验的积累吧。
由于框架的应用和本身如今的工做关系不是特别大,并且本身最近在努力学习一些编程底层类的东西,因此框架系列可能会有些‘便秘’,会写点其余的。。。这两天准备换地方住了,跑着看房子了,原谅我‘短’一点。。
哈哈,欢迎继续关注个人博客,嗯,一直在用心。