缺点报告级别:指定了在什么情形下,脚本代码中的缺点(这里的缺点是广义的缺点,包括E_NOTICE把稳、E_WARNING警告、E_ERROR致命缺点等)会以缺点报告的形式输出。
设置缺点报告级别的方法:
1)修正PHP的配置文件php.ini
这种办法设置error_reporting后,重启web做事器,就会永久生效。
这里以xampp集成软件包为例,打开配置文件php.ini,查看缺点报告级别error_reporting的默认值,如下:
error_reporting=E_ALL & ~E_DEPRECATED & ~E_STRICT
意思是报告所有的缺点,但除了E_DEPRECATED和E_STRICT这两种。
将其修正为:
error_reporting=E_ALL & ~E_NOTICE
意思是报告所有的缺点,但除了E_NOTICE这一种。这也是最常用的缺点报告级别,它不会报告把稳类(如:利用了未定义的变量)的缺点。
保存,重启web做事器后生效。
2)利用error_reporting()函数
这种办法设置后,可以立即生效。但仅限于在当前脚本中的error_reporting()函数调用的后面区域。
int error_reporting ([ int $level ] )
参数可以是整型或对应的常量标识符,推举利用常量的形式。返回值为当前位置处起浸染的缺点报告级别的值(整型值)。
下面列举一些缺点报告级别:
值 常量 解释
1 E_ERROR 报告导致脚本终止运行的致命缺点
2 E_WARNING 报告运行时的警告类缺点(脚本不会终止运行)
4 E_PARSE 报告编译时的语法解析缺点
8 E_NOTICE 报告关照类缺点,脚本可能会产生缺点
32767 E_ALL 报告所有的可能涌现的缺点(不同的PHP版本,常量E_ALL的值也可能不同)
error_reporting(E_ALL ^ E_NOTICE); // 除了E_NOTICE之外,报告所有的缺点
error_reporting(E_ERROR); // 只报告致命缺点
echo error_reporting(E_ERROR | E_WARNING | E_NOTICE); // 只报告E_ERROR、E_WARNING 和 E_NOTICE三种缺点
把稳:配置文件php.ini中display_errors的默认值为On,代表显示缺点提示,如果设置为Off,就会关闭所有的缺点提示。
例:warning.php
<?php
include(\"大众not_exist_inc.php\公众);//由于没有找到文件,产生两个警告信息,但是PHP解析器仍旧连续解析脚本,并运行print \公众Hello!\n\"大众;
print \"大众Hello!\n\"大众;
not_exist_func();//由于没有找到函数,产生一个致命的缺点信息,PHP解析器停滞运行,以是不会解析下面print \"大众Hello!\n\"大众;
print \"大众Hello!\n\"大众;
?>
结果:
parse_error.php
<?php
123456;abcdef //产生一个语法缺点,以是PHP解析器退出,就不会解析后面的代码
require \"大众not_exist_inc.php\"大众;
not_exist_func();
print \"大众Hello!\n\"大众;
?>
结果:
2.display_errors的缺点显示设置
例:error_report.php
<?php
//ini_set('display_errors', 'off');
include \"大众not_exist_inc.php\"大众;
print \"大众Hello!\n\公众;
not_exist_func();
print \"大众Hello!\n\"大众;
?>
结果:
<?php
ini_set('display_errors', 'off');//关闭显示缺点信息
include \"大众not_exist_inc.php\"大众;//警告信息将被屏蔽
print \"大众Hello!\n\"大众;
not_exist_func();//缺点信息将被屏蔽
print \公众Hello!\n\"大众;
?>
结果:
注:如果想调试某部分代码,这时候就可以利用这个配置屏蔽掉不想调试的部分代码缺点信息,只显示特定的代码信息。
3.利用error_reporting函数变动当前缺点级别设置
定义和用法
error_reporting() 函数跪地你给该当报告何种 PHP 缺点。
error_reporting() 函数能够在运行时设置 error_reporting 指令。
PHP 有诸多缺点级别,利用该函数可以设置在脚本运行时的级别。如果没有设置可选参数 level,error_reporting() 仅会返回当前的缺点报告级别。
语法
error_reporting(level);
参数描述
level
可选。规定新的 error_reporting 级别。可以是一个位掩码也可以是一个已命名的常量。
注释:强烈建议利用已命名的常量,以确保兼容将来的版本。由于缺点级别的添加、整数取值范围的增加,较久的基于整数的缺点级别不会总是和预期的表现同等。
可用的缺点级别常量及其实际含义描述在了 predefined constants 中。
返回值:返回旧的 error_reporting 级别,或者在 level 参数未给出时返回当前的级别。
例:
<?php
// 关闭缺点报告
error_reporting(0);
// 报告 runtime 缺点
error_reporting(E_ERROR | E_WARNING | E_PARSE);
// 报告所有缺点
error_reporting(E_ALL);
// 等同 error_reporting(E_ALL);
ini_set(\公众error_reporting\公众, E_ALL);
// 报告 E_NOTICE 之外的所有缺点
error_reporting(E_ALL & ~E_NOTICE);
?>
结果:
4.逼迫退出函数exit
定义和用法
exit() 函数输出一条,并退出当前脚本。
该函数是 die() 函数的别名。
语法
exit(status)
参数描述
status必需。规定在退出脚本之前写入的或状态号。状态号不会被写入输出。
解释
如果 status 是字符串,则该函数会在退出前输出字符串。
如果 status 是整数,这个值会被用作退出状态。退出状态的值在 0 至 254 之间。退出状态 255 由 PHP 保留,不会被利用。状态 0 用于成功地终止程序。
例:exit.php
<?php
$filename = '/filename'; //文件
$file = fopen($filename, 'rw') or exit(\"大众不能打开文件($filename)\"大众);//安装读写办法打开文件或者提示缺点信不能打开文件($filename)
?>
结果:
注:exit不是一个真正的函数,而是一个措辞构造类型,并且在PHP中还有一个与exit()浸染相同的函数die()。
5.利用trigger_error手动触发用户级的缺点
定义和用法
trigger_error() 函数创建用户级别的缺点。
trigger_error() 函数能结合内置的缺点处理器所关联,或者可以利用用户定义的函数作为新的缺点处理程序(set_error_handler())。
语法
trigger_error(errormsg,errortype);
参数描述
errormsg必需。规定缺点。最大长度 1024 字节。
errortype
可选。规定缺点类型。可能的值:
E_USER_ERROR
E_USER_WARNING
E_USER_NOTICE(默认)
返回值:如果规定了缺点的 errortype,则返回 FALSE。否则返回 TRUE。
例:trigger_error.php
<?php
$divisor=0;
if (assert($divisor == 0)) {//assert这个函数在php措辞中是用来判断一个表达式是否成立。
trigger_error(\"大众除数不能为零\"大众, E_USER_NOTICE);//创建用户级别的缺点。
}
?>
结果:
6.利用自定义的缺点处理函数
set_error_handler() 函数设置用户自定义的缺点处理函数。 该函数用于创建运行期间间的用户自己的缺点处理方法。 该函数会返回旧的缺点处理程序,若失落败,则返回 null。
语法
set_error_handler(error_function,error_types)
参数描述
error_function必需。规定发生缺点时运行的函数。
error_types可选。规定在哪个缺点报告级别会显示用户定义的缺点。默认是 \"大众E_ALL\公众。
提示和注释
提示:如果利用了该函数,会完备绕过标准的 PHP 缺点处理函数,如果必要,用户定义的缺点处理程序必须终止 (die() ) 脚本。 把稳:如果在脚本实行前发生缺点,由于在那时自定义程序还没有注册,因此就不会用到这个自定义缺点处理程序。
例:set_error.php
<?php
function UserHandler($errno, $errstr, $errfile, $errline)//自定义的缺点处理函数形参$errno为产生缺点的级别, $errstr为缺点信息字符串, $errfile为产生缺点信息的文件的文件名, $errline为产生缺点信息的语句在源码中的行号
{
switch ($errno) {
case E_USER_ERROR://检测缺点信息是否是E_USER_ERROR
print \公众<b>E_USER_ERROR</b>:\n\"大众;
print \公众代码是$errno \n\"大众;
print \"大众缺点信息字符串是 $errstr \n\"大众;
print \公众缺点发生在文件 $errfile 的第 $errline 行\n\公众;
print \"大众程序中止...<br />\n\"大众;
exit(1);
break;
case E_USER_WARNING://检测缺点信息是否是E_USER_WARNING
print \"大众<b>E_USER_WARNING</b>:\n\"大众;
print \公众代码是$errno \n\公众;
print \"大众缺点信息字符串是 $errstr \n\"大众;
print \"大众缺点发生在文件 $errfile 的第 $errline 行\n\"大众;
break;
case E_USER_NOTICE://检测缺点信息是否是E_USER_NOTICE
print \"大众<b>E_USER_NOTICE</b>:\n\"大众;
print \"大众代码是$errno \n\"大众;
print \"大众缺点信息字符串是 $errstr \n\"大众;
print \公众缺点发生在文件 $errfile 的第 $errline 行\n\公众;
break;
default://默认为未知缺点类型
echo \"大众未知缺点: [$errno] $errstr<br />\n\"大众;
break;
}
}
function check($a, $b) //创建一个check函数 形参$a, $b
{
if (!is_numeric($b) || $b <= 0) { //产生一个E_USER_ERROR类型的缺点信息
trigger_error(\"大众第二个参数b小于0\"大众, E_USER_ERROR); //产生一个用户级别的缺点信息
}
if (!is_array($a)) {//产生一个E_USER_WARNING类型的缺点信息
trigger_error(\"大众第一个参数a不是数组\公众, E_USER_WARNING);//产生一个用户级别的缺点信息
return null;
}
for ($i=0; $i<count($a); $i++) {//产生一个E_USER_NOTICE类型的缺点信息
if (!is_numeric($a[$i]))
trigger_error(\"大众参数a中第 $i 个元素不是数字\"大众, E_USER_NOTICE);//产生一个用户级别的缺点信息
}
}
print '<pre>';
error_reporting(E_USER_ERROR | E_USER_WARNING | E_USER_NOTICE);//变动当前缺点级别设置
set_error_handler(\"大众UserHandler\"大众);//利用自定义的缺点处理函数
$error_array = array(2,3, \"大众string\"大众, 5.5, 43.3, 21.11);
$b = check($error_array, '123');
$c = check(123, 2.3);
$d = check($error_array, -2.5);
print '</pre>';
?>
结果:
7.抛出非常与捕获非常
try ......throw......catch
Try - 利用非常的函数该当位于 \"大众try\公众 代码块内。如果没有触发非常,则代码将照常连续实行。但是如果非常被触发,会抛出一个非常。
Throw - 这里规定如何触发非常。每一个 \公众throw\"大众 必须对应至少一个 \公众catch\公众
Catch - \"大众catch\"大众 代码块会捕获非常,并创建一个包含非常信息的工具
例:exception.php
<?php
echo '<pre>';
try { //开始对try语句包含的模块进行非常检讨
$error = '这是一个非常信息';
throw new Exception($error); //抛出一个非常类,包含了缺点信息
echo '不会实行';
} catch (Exception $e) { //开始非常处理模块
echo '<b>捕获了非常:</b> '.$e->getMessage().\"大众\n\"大众;
}
echo '正常代码信息'; //开始实行常规代码
echo '</pre>';
?>
结果:
注:throw语句必须在try语句块浸染域内才故意义。
对付throw语句抛出的Exception类本身是PHP的一个内置非常处理类。
请大家多多关注,点赞,本文只供学习之用......