搭建自己的PHP MVC框架详解(3)
① 当我们抛出异常时,会实例化一个异常类,此异常类可以自己定义,但在catch语句中,我们需要规定要捕获的异常对象的类名,并且只能捕获到特定类的异常对象,当然我们可以在最后捕获一个异常基类(PHP内置异常类)来确保异常一定能被捕获。 ② 在抛出异常时,程序会被终止,并回溯代码找到第一个能捕获到它的catch语句,try catch语句是可以嵌套的,并且如上面代码所示 cacth语句是可以多次定义的。 ③ finally块会在try catch块结束后执行,即使在try catch块中使用return返回,程序没有执行到最后。 框架里的异常处理 说了那么多异常相关(当然解释这些也是为了能理解和使用框架),那么框架里要怎么实现呢? 重写异常类我们可以重写异常类,完善其内部方法: 如上,final方法是不可以重写的,除此之外,我们可以定义自己的方法,如记录异常日志,像我自定义的log方法,在catch代码块中,就可以直接使用$e->log来记录一个异常日志了。 注册全局异常方法我们可以使用set_exception_handler('exceptionHandler')来全局捕获没有被catch块捕获到的异常,此异常处理函数需要传入一个异常处理对象,这样可以分析此异常处理信息,避免系统出现不人性化的提示,增强框架的健壮性。 getFile() . "的" . $e->getLine() . "行!";
}
其他全局函数顺便再说一下其他的全局处理函数: ① ② 但是要注意这些全局函数需要在代码段的前面已经定义过再注册。 数据表和Model类的ActiveRecord映射 初次使用yii2的ActivceRecord类觉得好方便,只需要定义其字段同名属性再调用save方法就OK了(好神奇啊),它是怎么实现的呢,看了下源码,明白了其大致实现过程(基类)。 1. 使用‘describe table_name' 查询语句; 2. 分析查询结果:对每一个字段,有Field(字段名)、Type(数据类型)、Null(是否为空)、Key(索引信息,‘PRI'表示为主键)、Default(默认值)、Extra(附加信息,如auto_increment) 3. 通过判断其主键($row['KEY'] == 'PRI')信息,保存时看是否有主键信息,若存在,则为更新;不存在,则插入。 4. 另外,解析出来的字段信息还有更多妙用~~ 更多关于php框架相关内容感兴趣的读者可查看本站专题:《》、《》、《》、《》、《》、《》及《》 希望本文所述对大家PHP程序设计有所帮助。 (编辑:ASP站长网) |