错误处理:
1.使用die()方法,结束语句的执行,并输出错误消息
2.自定义错误和错误触发器

自定义错误处理函数(系统有默认的错误处理函数,自定义的错误处理会覆盖默认的处理函数)
======================================================================
error_function(error_level,error_message,error_file,error_line,error_context)
参数 描述
error_level 必需。为用户定义的错误规定错误报告级别。必须是一个值数。
error_message 必需。为用户定义的错误规定错误消息。
error_file 可选。规定错误在其中发生的文件名。
error_line 可选。规定错误发生的行号。
error_context 可选。规定一个数组,包含了当错误发生时在用的每个变量以及它们的值。

错误级别:
2         E_WARNING 非致命的 run-time 错误。不暂停脚本执行。
8         E_NOTICE Run-time 通知。脚本发现可能有错误发生,但也可能在脚本正常运行时发生。
256         E_USER_ERROR 致命的用户生成的错误。这类似于程序员使用 PHP 函数 trigger_error() 设置的 E_ERROR。
512         E_USER_WARNING 非致命的用户生成的警告。这类似于程序员使用 PHP 函数 trigger_error() 设置的 E_WARNING。
1024     E_USER_NOTICE 用户生成的通知。这类似于程序员使用 PHP 函数 trigger_error() 设置的 E_NOTICE。
4096     E_RECOVERABLE_ERROR 可捕获的致命错误。类似 E_ERROR,但可被用户定义的处理程序捕获。(参见 set_error_handler())
8191     E_ALL 所有错误和警告,除级别 E_STRICT 以外。(在 PHP 6.0,E_STRICT 是 E_ALL 的一部分)

错误触发器:trigger_error($errMsg,$errType)
===========================================
作用:用于指定自定义的错误消息
可能的错误类型$errType:
E_USER_ERROR - 致命的用户生成的 run-time 错误。错误无法恢复。脚本执行被中断。
E_USER_WARNING - 非致命的用户生成的 run-time 警告。脚本执行不被中断。
E_USER_NOTICE - 默认。用户生成的 run-time 通知。脚本发现了可能的错误,也有可能在脚本运行正常时发生。

错误日志 error_log(error,[type],[destination],[headers])
========================================================
作用:用于将错误信息保存到指定文件或向远程目的地发送错误信息
参数 描述
error 必需。要记录的错误消息。
type 可选。规定错误记录的类型。

可能的记录类型:

0 - 默认。根据在 php.ini 文件中的 error_log 配置,错误被发送到服务器日志系统或文件。
1 - 错误被发送到 destination 参数中的地址。只有该类型使用 headers 参数。
2 - 通过 PHP debugging 连接来发送错误。该选项只在 PHP 3 中可用。
3 - 错误发送到文件目标字符串。
 
destination 可选。规定向何处发送错误消息。该参数的值依赖于 "type" 参数的值。
headers 可选。只在 "type" 为 1 时使用。

规定附加的头部,比如 From, Cc 以及 Bcc。由 CRLF (\r\n) 分隔。

注释:在发送电子邮件时,必须包含 From 头部。可以在 php.ini 文件中或者通过此参数设置。
 

$test=2;

if ($test>1)
{
    error_log("A custom error has been triggered",1,"someone@example.com","From: webmaster@example.com");
}

PHP 异常处理
============
try{
    可能出现异常的代码块
}catch(Exception $e){
    处理异常/抛出异常
}

抛出一个异常:throw new Exception("异常信息");

Try - 使用异常的函数应该位于 "try" 代码块内。如果没有触发异常,则代码将照常继续执行。但是如果异常被触发,会抛出一个异常。
Throw - 这里规定如何触发异常。每一个 "throw" 必须对应至少一个 "catch"
Catch - "catch" 代码块会捕获异常,并创建一个包含异常信息的对象

注意:
当出现异常后,则出现异常的代码之后的代码不再执行
使用多个catch可以捕获多种类型的异常信息
PHP5.0 以前的函数没有异常机制,无法捕获异常,只能使用错误处理机制处理

设置顶层异常处理器 (Top Level Exception Handler)
set_exception_handler() 函数可设置处理所有未捕获异常的用户定义函数。

异常的规则
需要进行异常处理的代码应该放入 try 代码块内,以便捕获潜在的异常。
每个 try 或 throw 代码块必须至少拥有一个对应的 catch 代码块。
使用多个 catch 代码块可以捕获不同种类的异常。
可以在 try 代码块内的 catch 代码块中再次抛出(re-thrown)异常。
简而言之:如果抛出了异常,就必须捕获它。

自定义异常类:class MyException1 extends Exception(){}

<?php
// die()函数:
// ===========
// 例:当打开一个文件,如果不存在,则终止语句执行,并输出消息,否则继续执行
// file_exists("1.txt") or die("打开文件出错或文件不存在");
// echo "继续文件打开工作"; //自定义错误处理函数
//==================
//
//参数:$errorCode:错误级别的值,$errorMsg:错误消息
// function WarningError($errorVal,$errorMsg,$fielName,$line,$arrVal)
// {
// echo("<p>第<b>".$line."</b>行发生错误:</p>");
// echo("<p style='color:red'>错误消息:$errorMsg</p>");
// } // //注册自定义错误处理函数,对WARNING级别的错误进行处理
// set_error_handler("WarningError",E_WARNING);//第二个参数为可选错误级别,默认为E_ALL,即所有的错误 // $f = fopen("2.txt", "r"); //错误触发器:trigger_error($errMsg,$errType)
//===========================================
//作用:用于指定自定义的错误消息
// 可能的错误类型$errType: function WarningError($errorVal,$errorMsg,$fielName,$line,$arrVal)
{
echo("<p>第<b>".$line."</b>行发生错误:</p>");
echo("<p style='color:red'>错误消息:$errorMsg</p>");
} function MainError($errorVal,$errorMsg,$fielName,$line,$arrVal)
{
echo("<p>第<b>".$line."</b>行发生错误:</p>");
echo("<p style='color:red'>错误消息:$errorMsg</p>");
}
//注册自定义错误处理函数,对E_USER_ERROR级别的错误进行处理
set_error_handler("MainError",E_USER_ERROR);
set_error_handler("WarningError",E_USER_WARNING); //设置年龄,当年年龄的区间不在指定区间内时,触发自定义的错误消息
function SetAge($value=0)
{
if($value<0)
{
trigger_error("输入年龄过小",E_USER_ERROR);
}
elseif ($value>=150)
{
trigger_error("输入年龄过大");
}
elseif (!is_int($value)) {
trigger_error("请输入正整数!",E_USER_WARNING);
} echo("最后的代码执行了\n");
} // SetAge(180);//由于没有给默认的错误触发器注册自定义的E_USER_NOTICE级别错误处理函数,所以结果是
// Notice: 输入年龄过大 in D:\PHPEnv\WWW\test001.php on line 77
// 最后的代码执行了 // SetAge(-10);
// 注册了E_USER_ERROR级别的错误处理函数后,输出结果为:
// 第73行发生错误:
// 错误消息:输入年龄过小
// 最后的代码执行了 // SetAge("aa");
//
//
//
//
// 错误日志 error_log(error,[type],[destination],[headers])
// ===================
// 作用:用于将错误信息保存到指定文件或向远程目的地发送错误信息
// 参数 描述
// error 必需。要记录的错误消息。
// type 可选。规定错误记录的类型。 // 可能的记录类型: // 0 - 默认。根据在 php.ini 文件中的 error_log 配置,错误被发送到服务器日志系统或文件。
// 1 - 错误被发送到 destination 参数中的地址。只有该类型使用 headers 参数。
// 2 - 通过 PHP debugging 连接来发送错误。该选项只在 PHP 3 中可用。
// 3 - 错误发送到文件目标字符串。 // destination 可选。规定向何处发送错误消息。该参数的值依赖于 "type" 参数的值。
// headers 可选。只在 "type" 为 1 时使用。 // 规定附加的头部,比如 From, Cc 以及 Bcc。由 CRLF (\r\n) 分隔。 // 注释:在发送电子邮件时,必须包含 From 头部。可以在 php.ini 文件中或者通过此参数设置。 // $test=2; // if ($test>1)
// {
// error_log("A custom error has been triggered",1,"someone@example.com","From: webmaster@example.com");
// } date_default_timezone_set("PRC");//设置时区【也可以在php.ini中设置】
function SetPhone($value='0')
{
if(!is_string($value))
{
error_log(date("Y-m-d G:i:s")."输入类型错误\r\n",3,"error.txt");
}
else if (strlen($value)>11) {
error_log(date("Y-m-d G:i:s")."号码长度过长\r\n",3,"error.txt");
}
} //发生的错误信息会记录到当前文件同目录下的error.txt文件中
// SetPhone("1252345345456");
// SetPhone(12254); /*
PHP 异常处理
============
try{
可能出现异常的代码块
}catch(Exception $e){
处理异常/抛出异常
} 抛出一个异常:throw new Exception("异常信息"); Try - 使用异常的函数应该位于 "try" 代码块内。如果没有触发异常,则代码将照常继续执行。但是如果异常被触发,会抛出一个异常。
Throw - 这里规定如何触发异常。每一个 "throw" 必须对应至少一个 "catch"
Catch - "catch" 代码块会捕获异常,并创建一个包含异常信息的对象 注意:
当出现异常后,则出现异常的代码之后的代码不再执行
使用多个catch可以捕获多种类型的异常信息
PHP5.0 以前的函数没有异常机制,无法捕获异常,只能使用错误处理机制处理 设置顶层异常处理器 (Top Level Exception Handler)
set_exception_handler() 函数可设置处理所有未捕获异常的用户定义函数。 异常的规则
需要进行异常处理的代码应该放入 try 代码块内,以便捕获潜在的异常。
每个 try 或 throw 代码块必须至少拥有一个对应的 catch 代码块。
使用多个 catch 代码块可以捕获不同种类的异常。
可以在 try 代码块内的 catch 代码块中再次抛出(re-thrown)异常。
简而言之:如果抛出了异常,就必须捕获它。 自定义异常类:class MyException1 extends Exception(){} */
function DelUser($userName)
{
if($userName=="admin")
{
throw new Exception("删除失败");
}
} // try{
// DelUser("admin");
// echo "我被执行了";//这句代码不会被执行(某句代码出异常了,则后面的代码不再执行)
// }catch(Exception $e){//捕获异常信息 // echo($e->getMessage());//$e->getMessage()获得异常信息
// echo(" 错误行:".$e->getLine());
// } //设置顶层异常处理器 set_exception_handler()
//作用:用于捕获未捕获的异常信息
function MyException($e)
{
echo "\n顶级异常处理器捕获异常:".$e->getMessage();
}
set_exception_handler("MyException");
// DelUser("admin"); //自定义异常类:class MyException1 extends Exception
class MyException1 extends Exception
{ }
class MyException2 extends Exception
{ }
function A()
{
throw new MyException1("aaa");
}
function B()
{
throw new MyException2("bbb");
} try{
A();
B();
}
catch(MyException1 $e1){
echo $e1->getMessage();
}
catch(MyException2 $e2){
echo $e2->getMessage();
} ?>

PHP基础之 错误处理 及 异常处理的更多相关文章

  1. [python]错误检测及异常处理try-except

    1. 简介 要给代码添加错误检测及异常处理,只需要将其封装在try-except中. try:通常的代码 except:处理错误和异常的代码 2. 示例 import os try: path = ' ...

  2. python 基础篇 错误和异常处理

    语法错误 所谓语法错误,也就是你写的代码不符合编程规范,无法被识别与执行,比如下面这个例子: if name is not None print(name) If 语句漏掉了冒号,不符合 Python ...

  3. python基础之错误、调试(异常处理)

    在程序运行过程中,总会遇到各种各样的错误. 有的错误是程序编写有问题造成的,比如本来应该输出整数结果输出了字符串,这种错误我们通常称之为bug,bug是必须修复的. 有的错误是用户输入造成的,比如让用 ...

  4. Python自动化 【第七篇】:Python基础-面向对象高级语法、异常处理、Scoket开发基础

    本节内容: 1.     面向对象高级语法部分 1.1   静态方法.类方法.属性方法 1.2   类的特殊方法 1.3   反射 2.     异常处理 3.     Socket开发基础 1.   ...

  5. PHP中的错误处理、异常处理机制详解

    在编写PHP程序时,错误处理是一个重要的部分.如果程序中缺少错误检测代码,那么看上去很不专业,也为安全风险敞开了大门 例: <?php $a = fopen('test.txt','r'); / ...

  6. .Net程序员之Python基础教程学习----函数和异常处理[Fifth Day]

       今天主要记录,Python中函数的使用以及异常处理. 一.函数:    1.函数的创建以及调用. def Add(val1,val2): return val1+val2; print Add( ...

  7. JavaScript基础——添加错误处理

    JavaScript编程的一个重要组成部分,是添加错误处理来应对可能会出现的问题.默认情况下,如果因为你的JavaScript中的问题二产生了一个代码异常,那么脚本就会失败并且无法完成加载.这通常不是 ...

  8. PHP中的错误处理和异常处理

    错误处理:    1.语法错误    2.运行时的错误    3.逻辑错误 错误报告:        错误E_ERROR        警告E_WARNING        注意E_NOTICE 开发 ...

  9. PHP错误处理及异常处理笔记

    给新人总结一下PHP的错误处理. PHP提供了错误处理和日志记录的功能. 这些函数允许你定义自己的错误处理规则,以及修改错误记录的方式. 这样,你就可以根据自己的需要,来更改和加强错误输出信息以满足实 ...

随机推荐

  1. FT232RL变砖之后

    FT232RL是个是神奇的片子,说万能可能有些夸张,但是...总之就是FTDIChip这个神奇的公司基于类似的技术,做了很多好用的产品,包括转IIC啦,转SPI啦,密码狗啦之类的.是个很有用的工具就对 ...

  2. Linux下pdf阅读器推荐

    由于需要在pdf文件上做标记,所以自带的文档查看器根本满足了需求,之前去网上查了查,Okular评价挺高,就安装了一个,确实能基本满足我的需求,但是 1.界面感觉还是不太友好,书签栏一直在那. 2.而 ...

  3. 第一个有点作用的PHP扩展

    C/C++去开发PHP扩展 我觉的对于PHP开发人员来说,学的东西非常杂,也非常多,当然了开发PHP扩展也是一个必须要掌握的技能,这里膜拜下大神鸟哥(Laruence)~ 今天要开发的第一个有点功能的 ...

  4. C/C++ 程序的build过程

    (This article is under constant construction) DISCLAIMER: 本文的主要内容来自https://gcc.gnu.org/onlinedocs/gc ...

  5. TextView里限制输入字数的方法

    一开始采用的方法是函数textView:shouldChangeTextInRange:replacementText:来进行判断: //键入Done时,插入换行符,然后执行addBookmark - ...

  6. JQuery 技巧积累与总结

    1.获得select 元素选中的值 $('#WishlistSelect option:selected').val(); 2.设置按钮的disabled属性的实现代码 $('#button').at ...

  7. UVA 11419SAM I AM(输出 最小覆盖点 )

    参考博客:如何找取 最小覆盖点集合 题意:R*C大小的网格,网格上面放了一些目标.可以再网格外发射子弹,子弹会沿着垂直或者水平方向飞行,并且打掉飞行路径上的所有目标,计算最小多少子弹,各从哪些位置发射 ...

  8. php 简单分页类

    /**  file: page.class.php   完美分页类 Page  */ class Page {  private $total;          //数据表中总记录数  privat ...

  9. Unity Serialization

    http://forum.unity3d.com/threads/serialization-best-practices-megapost.155352/ http://docs.unity3d.c ...

  10. yum安装指定(特定)版本(旧版本)软件包的方法

    在命令行里输入: yum list SDL 注意这里类库的名字是区别大小写的. 参考 http://www.dabu.info/yum-install-specific-version-old-pac ...