错误处理:
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. iOS&Node 搭建WebSocketServer实现聊天

    Server端使用的是Node.JS里的一个Socket.io的模块 iOS客户端使用的是SocketIO和SBJson框架 作者的源码有些问题,我做了一些自定义的修改. 代码地址:https://g ...

  2. C#实现 Eval

    主要是使用 CSharpCodeProvider,动态调用来进行返回. 首先会拼接成一个类的一个方法,然后返回这个方法的值.不过,因为还是使用反射,所以效率不高. public static clas ...

  3. PowerDesigner 学习笔记

    软件:PowerDesginer16.5 首先说一下对应的模型 New Model  --->  Model Type 作为一个英语渣,实在是压力颇大,然而汉化经常会导致无故的BUG,所以简单翻 ...

  4. hdu 2036 - 改革春风吹满地(计算几何)

    题意:求解多边形面积 解法: 先了解数学上"叉积"的含义与性质: 三角形ΔABC的面积为: 我们可以依次计算每个三角形的面积,ΔABC,ΔACE,ΔEF - - 所有三角形的面积之 ...

  5. Git连接到自己的GitHub仓库

    1.配置本地git $git config --global user.name "xxx" $git config --global user.email "xxxxx ...

  6. [NOIP2014] 解方程&加强版 (bzoj3751 & vijos1915)

    大概有$O(m)$,$O(n\sqrt{nm})$,$O(n\sqrt{m})$的3个算法,其中后2个可以过加强版.代码是算法3,注意bzoj的数据卡掉了小于20000的质数. #include< ...

  7. BZOJ2208: [Jsoi2010]连通数

    tarjan缩点后拓扑排序,每一个点用一个bitset记录哪些点能到达它. PS:数据太水,暴力能过. #include<bits/stdc++.h> using namespace st ...

  8. python学习笔记-(八)装饰器、生成器&迭代器

    本节课程内容概览: 1.装饰器 2.列表生成式&迭代器&生成器 3.json&pickle数据序列化 1. 装饰器 1.1 定义: 本质上是个函数,功能是装饰其他函数—就是为其 ...

  9. 遍历jsonobject

    遍历jsonobject 1 entrySet.iterator生成迭代器 2 从迭代器获取Map.Entry的单元对象 3 获取key和value Map<String,JSONObject& ...

  10. CPU绑定操作

    使用virsh vcpuinfp命令查看虚拟机VCPU和物理CPU的对应关系 [root@svn ~]# virsh vcpuinfo 16 VCPU: 0 CPU: 3 状态: running CP ...