PHP之谬误解决详解
谬误陈诉
PHP顺序的谬误发作普通归属于下列三个畛域:
一、语法谬误
语法谬误最多见,而且也容易修复。如:代码中脱漏一个分号。这种谬误会阻止剧本的执行
二、运转时谬误
这类谬误普通没有会阻止PHP剧本的执行,但会阻止以后要做的事件。输入一条谬误,但php剧本持续执行
三、逻辑谬误
这类谬误最费事,既没有阻止剧本执行,也没有输入谬误音讯
[留意]若将php.ini设置装备摆设文件中的display_errors从默许的on设置为off,将没有显示任何谬误
正在PHP剧本中可挪用ini_set()函数,静态设置php.ini设置装备摆设文件
ini_set("display_errors","On"); //显示一切谬误信息
谬误级别
实际上,表格中的13个谬误类型能够分为3类:留意级别、正告级别以及谬误级别。普通地,正在开发进程中,疏忽留意级此外谬误
<?php getType($a);//不决义变量,留意级别 echo "1111111111111111<br>"; getType();//未传入参数,正告级别 echo "222222222222222222222<br>"; getType3();//函数名谬误,谬误级别 echo "333333333333333333333<br>"; ?>
谬误解决
一、第一种谬误解决办法是修正设置装备摆设文件
谬误级别默许为提醒一切级此外谬误:error_reporting = E_ALL
把error_reporting = E_ALL
改成error_reporting = E_ALL & ~E_NOTICE
示意没有提醒留意级此外谬误。而后,重启效劳失效
error_reporting = E_ALL & ~E_NOTICE
抛出任何非留意的谬误,默许值error_reporting = E_ERROR | E_PARSE | E_CORE_ERROR
只思考致命的运转时谬误、新解析谬误以及外围谬误error_reporting = E_ALL & ~(E_USER_ERROR | E_USER_WARNING | E_USER_NOTICE)
陈诉除了用户招致的谬误以外的一切谬误
二、第二种谬误解决办法是应用谬误解决函数
正在PHP剧本能够经过error_reporting( )函数静态设置谬误陈诉级别
<?php error_reporting(E_ALL & ~E_NOTICE); getType($a);//留意级别 echo "1111111111111111<br>"; getType();//正告级别 echo "222222222222222222222<br>"; getType3();//谬误级别 echo "333333333333333333333<br>";?>
自界说谬误解决
自界说谬误陈诉的解决形式,能够齐全绕过规范的PHP谬误解决函数,这样就能够按本人界说的格局打印谬误陈诉,或扭转谬误陈诉打印的地位,如下几种状况能够思考自界说谬误解决:一、记下谬误的信息,实时发现一些消费环境呈现的成绩;二、屏蔽谬误;三、管制谬误的输入; 四、作为调试对象
应用set_error_handler()函数来设置用户自界说谬误解决
<?php //error_reporting(E_ALL & ~E_NOTICE); //正在php中注册一个函数来解决谬误陈诉,代替默许的形式 set_error_handler("myerrorfun"); $mess = ""; //自界说谬误陈诉解决函数 function myerrorfun($error_type, $error_message, $error_file, $error_line) { global $mess; $mess.="发作谬误级别为{$error_type}类型, 谬误音讯<b>{$error_message}</b>, 正在文件<font >{$error_file}</font>中, 第{$error_line}行。<br>"; } getType($a); echo "1111111111111111<br>"; getType(); echo "222222222222222222222<br>"; echo "--------------------------------------------<br>"; echo $mess; ?>
谬误日记
普通地,顺序城市保留谬误日记,用来记载顺序运转时的谬误信息。且谬误日记都有其默许的存储地位。关于谬误信息以及谬误日记的地位,咱们均可以进行修正
正在PHP.ini设置装备摆设文件中,有如下几项能够对谬误日记进行设置
error_reporting = E_ALL
//将向PHP发送每一个谬误display_errors=Off
//没有显示谬误陈诉log_errors=On //决议日记语句记载的地位
log_errors_max_log=1024
//每一个日记项的最年夜长度error_log=G:/myerror.log
//指定谬误写进的文件
正在php文件中,咱们能够应用函数error_log()来自界说谬误信息
<?phperror_log("登录失败了!");?>
异样解决
异样(Exception)解决用于正在指定的谬误发作时扭转剧本的失常流程,是PHP5中的一个新的首要特点。异样解决是一种可扩大、易保护的谬误解决机制,并提供了一种新的面向工具的谬误解决形式
try{
应用try去蕴含可能会发作异样的代码
一旦呈现异样try进行捕捉异样,交给catch解决。
抛出异样语句:throw 异样工具。
}catch(异样工具参数){
正在这里做异样解决。
}[catch(。,,){
.. .. ..
}]
<?php try { $error = 'Always throw this error'; throw new Exception($error); //创立一个异样工具,经过throw语句抛出 echo 'Never executed'; //从这里开端,try代码块内的代码将没有会再被执行 } catch (Exception $e) { echo ‘Caught exception: ’.$e->getMessage()." "; //输入捕捉的异样音讯 } echo 'Hello World'; //顺序不解体持续向下执行?>
自界说异样
用户能够用自界说的异样解决类来扩大PHP内置的异样解决类。如下的代码阐明了正在内置的异样解决类中,哪些属性以及办法正在子类中是可拜访以及可承继的
<?phpclass Exception{ protected $message = 'Unknown exception'; // 异样信息 private $string; // __toString cache protected $code = 0; // 用户自界说异样代码 protected $file; // 发作异样的文件名 protected $line; // 发作异样的代码行号 private $trace; // backtrace private $previous; // previous exception if nested exception public function __construct($message = null, $code = 0, Exception $previous = null); final private function __clone(); // Inhibits cloning of exceptions. final public function getMessage(); // 前往异样信息 final public function getCode(); // 前往异样代码 final public function getFile(); // 前往发作异样的文件名 final public function getLine(); // 前往发作异样的代码行号 final public function getTrace(); // backtrace() 数组 final public function getPrevious(); // 以前的 exception final public function getTraceAsString(); // 已格成化成字符串的 getTrace() 信息 // Overrideable public function __toString(); // 可输入的字符串}?>
[留意]假如应用自界说的类来扩大内置异样解决类,而且要从新界说结构函数的话,倡议同时挪用parent::__construct()来反省一切的变量能否已被赋值。当工具要输入字符串的时分,能够重载__toString() 并自界说输入的款式
<?php /* 自界说的一个异样解决类,但必需是扩大内异样解决类的子类 */ class MyException extends Exception{ //重界说结构器使第一个参数 message 变成必需被指定的属性 public function __construct($message, $code=0){ //能够正在这里界说一些本人的代码 //倡议同时挪用 parent::construct()来反省一切的变量能否已被赋值 parent::__construct($message, $code); } public function __toString() { //重写父类办法,自界说字符串输入的款式 return __CLASS__.":[".$this->code."]:".$this->message."<br>"; } public function customFunction() { //为这个异样自界说一个解决办法 echo "按自界说的办法解决呈现的这个类型的异样<br>"; } }?>
<?php try { //应用自界说的异样类捕捉一个异样,并解决异样 $error = '容许抛出这个谬误'; throw new MyException($error); //创立一个自界说的异样类工具,经过throw语句抛出 echo 'Never executed'; //从这里开端,try代码块内的代码将没有会再被执行 } catch (MyException $e) { //捕捉自界说的异样工具 echo '捕捉异样: '.$e; //输入捕捉的异样音讯 $e->customFunction(); //经过自界说的异样工具中的办法解决异样 } echo '你好呀'; //顺序不解体持续向下执行?>
相干参考:php教程
以上就是PHP之谬误解决详解的具体内容,更多请存眷资源魔其它相干文章!
标签: php php开发教程 php开发资料 php开发自学