错误处理方式:
错误的种类:
1.语法的错误(即使将错误输出,发生在程序开发时,最容易修复)。
2.运行时的错误(程序开发完以后,已经开始使用)。
3.逻辑错误(最难发现)。
错误报告:
1.错误(致命的,程序中断):E_ERROR
例如:
$a=pb160
这条语句,没有加分号,所以会出现错误的提示,即致命错误,程序中断不往下执行。
2.警告(不中断程序,某些功能没有执行成功):E_WARNING
例如:gettype();
这条语句,没有传递参数,程序继续往下执行。比注意的级别高,一般得把这种错误解决掉。
3.注意(无关紧要的提示,可以忽略和屏蔽):E_NOTICE
例如:
gettype($a);
这条语句,会产生注意的提示,即提示没有声明变量。但是程序会继续往下执行。(前提是在配置文件php.ini中开始提示所有错误,即:error_reporting=E_ALLl)
注意: 开发阶段一般开启所有的错误报告,为的是调试程序使其尽量的少错误。当程序投入使用时,即关闭不必要的错误提示,例如少量的notice啊,因为如果不关闭的话,对不懂技术的用户则会觉得你的页面真乱,没有做好,懂技术的特别是黑客的话,则会通过的暴露的错误路径找到你的重要文件,实施破坏(通过配置文件中的display_errors=off,则可以不输出)。但是错误报告还是要输出给维护人员看的,所以我们可以把错误输出到错误日志中(首先在配置文件中把日志错误log_error=on 开启,并设置最大日志错误长度。):
1.若在配置文件中没有指定错误日志的路径,则默认写在web服务器的日志里面,即在apachex.x/logs/error.log里;
2.在配置文件中指定error_log指定一个文件名,比如指定把error_log=filename 改为:error_log=c:/error.log;
3.写入操作系统日志中,即开启配置文件中的error_log=syslog。(win中的日志在:我的电脑--右键--管理--系统 工具--事件查看器--应用程序)
还有就是,别人的配置文件和你的配置文件对于错误报告的处理方式可能不一样,所以在你的机子的环境中不出现错误报告,看似完美,但是在别人的机子环境中则可能出现报告。
例如:你的配置文件对于错误的处理方式是:error_reporting=E_ALL^E_NOTICE,即在你的机子上不显示注意,即使有许多的注意。但是别人的机子上的配置环境如果是:error_reporting=E_ALL,你写的所谓完美的程序在人们的机子上则是不堪入目,因为隔几行就会出现一个notice。
有比如说你是虚拟主机的用户,不具有对服务器配置文件的更改权限,但是又想改变一些配置的话,还有另外的一种方法。
即在全局文件中用特定的函数来定义错误或者其他的配置。
这个特定的函数就是:error_reporting()。
可以这样写:error_reporting(E_ALL &^E_NOTICE),这样就不必顾忌配置文件的不同了~
题外话: 配置文件中的所有属性都可以获得和改变,通过外部文件和函数。
ini_set("配置参数名称","配置值")----设置属性配置,例如:ini_set("upload_max_filesize","100M")---配置最大上传文件的值。
ini_get("配置参数名称")----获取属性配置值,例如:ini_get("upload_max_filesize")----得到默认的200M。
异常处理:
try{
}catch(){
}
1.如果try中的代码没有问题,则执行完try中的代码后跳过catch往后执行;
2.如果try中的代码出现异常,则抛出一个异常对象(使用throw),抛给了catch中的参数,try中的代码就不会再往下执行了,直接跳转到catch中执行,一次往下执行。
3.catch里面提示发生了什么异常,但是这并不是主要的,我们需要在catch中解决传过来的异常,若解决不了,则输出给用户。
异常类:
内置异常类(参考手册)
自定义异常类:
1.自己定义异常类,必须是内置类Exception的子类;
2.Exception中只有构造方法和tostring()可以覆盖,其他都是用final关键字修饰的。
一个例子:
自己写异常类的作用就是:写一个或者多个方法来解决发生的这个异常!