PHP学习笔记7:错误和异常处理

读《PHP和MySQL Web开发》笔记合集:

http://my.oschina.net/bluefly/blog/478580

1、异常处理概念

1)异常处理在 try 代码块被调用执行

try

{

//code goes here

}

2)PHP中,异常必须手动抛出

throw new Exception(‘message‘,code);

这是一个语言结构,而不是一个函数。

可以在throw子句中传递任何其他对象

3)在try代码块之后,必须至少给出一个catch代码块。

catch ( typehint exception)

{

//  handle exception

}

可以将多个catch 代码块与一个try 代码块进行关联。

例子:

<?php

try  {

throw new Exception("A terrible error has occurred", 42);

}

catch (Exception $e) {

echo "Exception ". $e->getCode(). ": ". $e->getMessage()."<br />".

" in ". $e->getFile(). " on line ". $e->getLine(). "<br />";

}

?>


2、Exception类

Exception

(PHP 5 >= 5.1.0)

简介

Exception是所有异常的基类。

类摘要

Exception {

/* 属性 */

protectedstring
$message ;

protectedint
$code ;

protectedstring
$file ;

protectedint
$line ;

/* 方法 */

public
__construct ([ string $message = "" [, int $code = 0 [, 
Exception$previous = 
NULL ]]] )

final public string 
getMessage ( void )

final public Exception 
getPrevious ( void )

final public int 
getCode ( void )

final public string 
getFile ( void )

final public int 
getLine ( void )

final public array 
getTrace ( void )

final public string 
getTraceAsString ( void )

public string
__toString ( void )

final private void 
__clone ( void )

}

属性

message

异常消息内容

code

异常代码

file

抛出异常的文件名

line

抛出异常在该文件中的行号

Table of Contents

3、用户自定义异常

用户可以扩展Exception类来创建自己的异常类。

注意,Exception类大多数公有方法都是final,不能重载,我们可以创建自己的Exception子类,但是不能改变这些基本方法的行为。但是注意,__toString()函数可以重载。

例子:

<?php

class myException extends Exception

{

function __toString()

{

return "<table border=\"1\">

<tr>

<td><strong>Exception ".$this->getCode()."

</strong>: ".$this->getMessage()."<br />"."

in ".$this->getFile()." on line ".$this->getLine()."

</td>

</tr>

</table><br />";

}

}

try

{

throw new myException("A terrible error has occurred", 42);

}

catch (myException $m)

{

echo $m;

}

?>

4、I/O部分与建议

I/O部分容易出异常,通常,良好的编码习惯要求try代码块的代码量较少,并且在代码块的结束处捕获相关异常。

注意:如果一场没有匹配的catch语句块,PHP将报告一个致命错误。

例子:

// open file for appending

try

{

if (!($fp = 
@fopen("$DOCUMENT_ROOT/../orders/orders.txt", ‘ab‘)))

throw new fileOpenException();

if (!flock($fp, LOCK_EX))

throw new fileLockException();

if (!fwrite($fp, $outputstring, strlen($outputstring)))

throw new fileWriteException();

flock($fp, LOCK_UN);

fclose($fp);

echo "<p>Order written.</p>";

}

catch (fileOpenException $foe)

{

echo "<p><strong>Orders file could not be opened.

Please contact our webmaster for help.</strong></p>";

}

catch (Exception $e)

{

echo "<p><strong>Your order could not be processed at this time.

Please try again later.</strong></p>";

}

5、异常与PHP其他错误处理机制

PHP还提供了复杂的错误处理机制,注意,比如异常处理和@错误抑制并不会影响。

例子:

if (!($fp = 
@fopen("$DOCUMENT_ROOT/../orders/orders.txt", ‘ab‘)))

throw new fileOpenException();

如果该函数调用失败,PHP将发出一个浸膏,根据php.ini的设置进行错误报告或记录。

时间: 2024-08-08 20:43:37

PHP学习笔记7:错误和异常处理的相关文章

springmvc学习笔记--REST API的异常处理

前言: 最近使用springmvc写了不少rest api, 觉得真是一个好框架. 之前描述的几篇关于rest api的文章, 其实还是不够完善. 比如当遇到参数缺失, 类型不匹配的情况时, 直接抛出异常, 返回的内容是500+的错误页面, 而不是json内容, 这让移动端的调用方很难处理. 本文主要讲述对于rest api, springmvc对异常的解决处理方案. 系列整理: springmvc学习笔记系列的文章目录: • idea创建springmvc项目 • 面向移动端的REST API

Python学习笔记七-错误和异常

程序员总是和各种错误打交道,学习如何识别并正确的处理程序错误是很有必要的. 7.1错误和异常 1.错误 从软件方面来看,错误分为语法错误和逻辑错误两种.这两种错误都将导致程序无法正常进行下去,当Python检测到一个错误时就出现了异常. 2.异常 当编译器检测到错误并且意识到错误条件.解释器会引发一个异常(程序员也可以自己引发一个异常,后面会说到). 以下是7种Python中常见的错误. 1.NameError,尝试访问一个未申明的例子. 2.ZeroDivisionError,零除错误. 3.

Android(java)学习笔记81:java异常处理机制

1.try....catch/try...catch...finally 1 package cn.itcast_02; 2 3 /* 4 * 我们自己如何处理异常呢? 5 * A:try...catch...finally 6 * B:throws 抛出 7 * 8 * try...catch...finally的处理格式: 9 * try { 10 * 可能出现问题的代码; 11 * }catch(异常名 变量) { 12 * 针对问题的处理; 13 * }finally { 14 * 释放

java学习笔记(十)异常处理

异常是程序在执行过程中所产生的问题,导致异常产生的原因包括:用户输入了无效的数据.找不到一个需要打开的文件.在通讯过程中网络连接断开或者JVM发生了内存溢出等等. 异常是被一个方法抛出的对象. 异常分类:检查异常:检查异常通常是用户错误或者不能被程序员所预见的问题.运行时异常:是一个程序在运行过程中可能发生的.可以被程序员避免的程序类型.错误:实际上,错误根本不是异常,但却是用户或程序员所无法控制的问题.错误通常在设计好编写Java应用程序时被忽略. 对异常处理的三种选择:(1).捕获这个异常,

JS学习笔记8_错误处理

1.错误处理语法:(js没有异常exception一说,都是错误error) try{ //throw new Error(msg); //throw '错误'; //throw false; //throw ... //throw操作符的操作数没有任何限制,可以随便扔 } catch(err){ //alert(err.message);//message是唯一一个全浏览器支持的属性 } finally{ // } 注意:[IE7-]有个bug:没有catch块,finally块就不执行,所以

《javaweb学习笔记2-jsp错误页设置》

在网站中经常由于用户的不当操作造成异常,一般情况下我们可以将这些异常在一个网页中统一显示.这个时候就需要用到errorPage跟isErrorPage属性. errorPage指令的作用就是在其中指定一个网页,当jsp程序出现未被捕获的异常时,就跳转到那个指定的页面,通常情况下跳转到的页面需要使用isErrorPage来指明处理其他页面的错误信息. 完成错误页的操作,满足下列条件: 1.指定错误出现时的跳转页(此处跳转页为anErrorPage.jsp),通过errorPage属性指定 语法:<

python学习笔记(八) - 错误、调试、测试

一.错误处理 1. 使用try .. exception .. finally try: print 'try...' r = 10 / 0 print 'result:', r # 出现异常不会打印这句话 except ZeroDivisionError, e: # 如果有异常就会被捕获到 print 'except:', e else: print 'no error!' # 如果没有异常就执行else finally: print 'finally...' # finally是肯定会执行的

Nginx学习笔记05错误页面重定向

Nginx至少存在两种不同的配置来指定错误页面: 使用try_files配置项. 使用error_page配置项. 先介绍使用try_files配置项的情况. Nginx提供的try_files配置允许在一个location中指定多个潜在的可能的响应页面,Nginx将按照定义的次序依次尝试访问这些响应页面,直到成功访问该页面.根据这个机制,可以在try_files配置的页面列表的最后面加上一个页面作为默认的错误页面. 配置内容: location /abc { root  html; try_f

Struts学习笔记_声明式异常处理

一,声明式异常处理: 第一步:首先在有可能抛出异常的方法里面throws exception public List<Category> list() throws SQLException { Connection conn = DB.createConn(); String sql = "select * from _category_"; //数据库里面没有这个table,产生异常 PreparedStatement ps = DB.prepare(conn, sql

Spring.Net学习笔记(零)-错误汇总

1.错误一:ObjectDefinitionStoreException "Spring.Objects.Factory.ObjectDefinitionStoreException"类型的未经处理的异常在 Spring.Core.dll 中发生 通过看详细信息,原来是找不到文件 未能找到文件"F:\20160221\Demo\CPrj\bin\Debug\objects.xml". 处理方式:将objects.xml的[复制到输出目录]设置为始终复制 2.错误二: