php.ini 中配置缺点
在 PHP4 中,没有非常 Exception 这个观点,只有缺点 Error。我们可以通过修正 php.ini 文件来配置用户端输出的缺点信息。
Php.ini 将能够显示的缺点类型分为如下种类。
E_ALL -所有的缺点和警告,(不包含 E_STRICT).
E_ERROR -致命的运行时缺点
E_RECOVERABLE_ERROR - 险些致命的运行时缺点
E_WARNING - 运行时的警告(非致命缺点)
E_PARSE -编译时解析缺点
E_NOTICE - 运行时的提示,这些提示常常是代码中的 bug 引起的,大概是故意的(如利用一
个未初始化的变量,事实上它被自动初始化成一个空字符串) 。
E_STRICT - 运行时提示,能够给于 PHP 建议,以改变你的代码,以得到最好的协同性,并完
善代码的兼容性。
E_CORE_ERROR - PHP 初始化启动过程中的致命缺点。
E_CORE_WARNING - PHP 初始化启动过程中的非致命缺点。
E_COMPILE_ERROR - 致命的编译缺点。
E_COMPILE_WARNING – 编译缺点(非致命的缺点)。
E_USER_ERROR - 用户缺点信息。
E_USER_WARNING - 用户警告信息。
E_USER_NOTICE -用户提示信息。
在 php.ini 中 error_reporting 掌握输出到用户真个种类。
以下几种是 php.ini 中推举的几种配置。
error_reporting = E_ALL
表示输出所有的信息。
error_reporting = E_ALL & ~E_NOTICE 表示输出所有的缺点,除了提示。
error_reporting = E_COMPILE_ERROR|E_RECOVERABLE_ERROR|E_ERROR|E_CORE_ERROR
表示输出所有的 ERROR 信息。
在 php.ini 中, display_errors 可以设置是否将以上设置的缺点信息输出到用户端。
display_errors = On 输出到用户端(调试代码时候,打开这项更方便)
display_errors = OFF 将不会输出到用户端(终极发布给用户时记得改成 off)
在 php 中,对付缺点处理非常的宽松。 php 系统会只管即便让程序运行下去,除非碰着致命缺点。
除了在 php.ini 文件中可以调度缺点的显示级别外,在 php 代码中也可以自定义显示的级别。
PHP 供应了一个方便的调度函数。
int error_reporting ( [int level] )
利用这个函数可以定义当前 php 页面中缺点的显示级别。参数 level 利用了二进制掩码组合的办法。
自定义缺点处理
在 php 中,可以自定义对缺点处理的办法。
首先要自定义一个缺点处理函数,然后利用 set_error_handler()函数向系统声明缺点处理函数。代码中产生的缺点就会利用这个缺点处理函数了。
利用 trigger_error()函数,可以触发一个 error。
例如 trigger_error(\公众age you input must >= 0\公众, E_USER_ERROR),触发自己的缺点信息。
PHP5 中的 SPL 模块
什么是 SPL,在 PHP5 中有一个独特的部分 SPL - StandardPHPLibrary Modules ( PHP 标准库)。
在 SPL 文档中这样解释的:SPL – PHP 标准库是用来办理标准问题并实现一些高效数据访问的接口和类的凑集。你会创造这些类用 PHP 代码编写在 sql.php 文件中,或在对应例子、内核的 .inc 文件中。基于这些内核的实现或在示例目录下的,也是一些 .php 文件。
在 SPL 中紧张包含了以下内容:
Iterators : SPL offers some advanced iterator algorithms。迭代器: SPL 供应了一些高等的迭代器运算法则。
Directories and Files : SPL offers two advanced directory and file handling classes:目录和文件: SPL 供应了两个高等路径和文件处理类。
XML : SPL offers an advanced XML handling class:XML : SPL 供应了一个高等 XML 处理类。
Array Overloading : SPL offers advanced Array overloading:数组重载 : SPL 供应了高等数组重载。
Counting : interface Countable allows to hook into the standard array function count().计数:接口 Countable 许可勾住标准数组方法 count().
Exceptions : SPL provides a set of standard Exception classes each meant to indicate a certain problem type.非常: SPL 规定了一套标准非常类,每个类都标识了一类确定的问题。
Observer: SPL suggests a standard way of implementing the observer pattern.不雅观察者: SPL 提出了实现不雅观察者模式的标准。
spl.php 中的非常处理类
从 PHP5.0 开始,在 SPL 中引入了非常处理类。
Notice : 非常与缺点在 PHP 中是两个完备不同的观点。
在 PHP 源码包中能找到这个文件 spl.php,在 spl.php 中定义了一个非常类 Exception。
在这个类中,定义了一些属性如下:
protected $message ;
存储非常信息的变量。
private $string;
格式化过往后的非常信息。
protected $code;
通过布局函数通报的 非常代码。
protected $file;
产生非常的 php 文件的文件名。
protected $line;
引起非常的代码在 php 文件中所在的行数。
private $trace;
引起非常后,包含干系信息的一个数组。
布局函数如下:
在 Exception 类有两个直接子类 LogicException 和 RuntimeException,分别表示逻辑非常和实行非常。
class LogicException extends Exception
程序中的逻辑缺点的非常类,它是 Exception 类的直接子类。
class BadFunctionCallException extends LogicException
当不合法的函数被调用产生的非常类。
class BadMethodCallException extends BadFunctionCallException
当不合法的方法被调用产生的非常类。
class DomainException extends LogicException
表示一个值不在有效范围内的非常。
class InvalidArgumentException extends LogicException
表示通报了无效的参数产生的非常。
class LengthException extends LogicException
表示一个参数超过了容许的长度的非常。
class OutOfRangeException extends LogicException
表示要求检索超越了数组等容器最大长度的非常。
class RuntimeException extends Exception
只有在实行时才能创造的非常,是 Exception 的直接子类。
class OutOfBoundsException extends RuntimeException
表示要求检索超越了数组等容器最大长度的非常。
class OverflowException extends RuntimeException
表示算法/缓存溢出非常
class RangeException extends RuntimeException
运行期间的范围非常
class UnderflowException extends RuntimeException
运行期间的算法/缓存的向下溢出非常。
在代码中捕获非常
可以通过 PHP5 支持的 try catch 语句捕获并处理非常。
语法如下:
try{
//可能引发非常的语句
}catch(非常类型 非常实例){
//非常处理语句
}
在 try 块中,放置可能产生非常的代码片段。在 catch 块中放置对这个非常处理的代码。
如:
try{
throw new Exception(“new Exception”); // 引发抛出非常
}catch(Exception $ex){
echo $ex; //打印这个非常工具
}
如果 try 块未产生任何非常, try 块将运行完毕, catch 块内容不会被实行。
try 块如果抛出了非常,会急速在 catch 中探求可以捕获改非常的 catch 块,并运行相应的 catch 块代码,然后跳出 try catch 块连续运行。 而 try 块中抛出非常后面的代码将被跳过。
如果 try 块中的非常不能被 catch 块捕获,将抛向系统引发系统致命缺点,代码终止运行。
在 catch 中,非常类型后面跟的是一个变量,这个变量将指向内存中被捕获的非常实例。
未利用非常处理时,我们从一个数组中取值,如果数组越界, PHP 只会报出一个缺点Notice,我们无法对这些缺点做任何的处理。
非常的处理可以运用到很多的地方,例如登录这一块可以用非常来处理不同的情形。
有心人终不负,多研究才能更好的创造一门措辞的奇妙之处。