缺点报告级别:指定了在什么情形下,脚本代码中的缺点(这里的缺点是广义的缺点,包括E_NOTICE把稳、E_WARNING警告、E_ERROR致命缺点等)会以缺点报告的形式输出。

设置缺点报告级别的方法:

1)修正PHP的配置文件php.ini

php错误转异常PHP 毛病以及异常的处置 Python

这种办法设置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的一个内置非常处理类。

请大家多多关注,点赞,本文只供学习之用......