异常处理try-catch-finally

php5.5新增 Finally模块

try {
   
//好好干,出了问题不要怕,外面有人接应
} catch (HttpException $e) {
   
//时刻准备着,处理上面抛出的HTTP问题
} catch (Exception $e) {
   
//时刻准备着,处理他们都处理不了的问题
} finally {
   
//打扫战场,都收拾好了再走人
}

try 中 return 后 finally 会继续执行,如果 finally
中也有return,则最终返回值为 finally 中 return 的值。
try 中 die 或 exit 后 finally
不会执行。

example01:


<?php
/**
finally块是个很好的设计,其中的return语句能覆盖其他块中的return语句,并处理try catch抛出的异常
无需try-catch嵌套来处理子try-catch抛出的异常
这个跟java的一样,c#是在finally块中存在return语句会抛出compile time error(编译时错误)
*/

function asdf()
{
try {
throw new Exception(‘error‘);
}
catch(Exception $e) {
echo "An error occurred";
throw $e;
}
finally {
//This overrides the exception as if it were never thrown
return "\nException erased";
}
}

try {
echo asdf();
}
catch(Exception $e) {
echo "\nResult: " . $e->getMessage();
}

/*
The output from above will look like this:

An error occurred
Exception erased

Without the return statement in the finally block it would look like this:

An error occurred
Result: error
*/

example02:


<?php
/**
有个相悖的行为在PHP 5.5.3‘s finally 和 return statements:
在一个方法中,try块单返回一个变量,finally块修改这个变量,返回的是finally修改过的,
但当try块返回的变量参与运算(evaluated in-line),会忽略finally块对这个变量的修改
(不知道原因...)
*/
function returnVariable(){
$foo = 1;
try{
return $foo;
} finally {
$foo++;
}
}

function returnVariablePlusZero(){
$foo = 1;
try{
return $foo+0;
} finally {
$foo++;
}
}

$test1 = returnVariable(); // returns 2, not the correct value of 1.
$test2 = returnVariablePlusZero(); // returns correct value of 1, but inconsistent with $test1.

example03:


<?php
/**
小例子 验证变量
check if the name contains only letters, and does not contain the word name
*/

$name = "Name";
try
{
try
{
//preg_match() 返回 pattern 的匹配次数。 它的值将是0次(不匹配)或1次,因为 preg_match() 在第一次匹配后 将会停止搜索。 preg_match_all() 不同于此,它会一直搜索 subject 直到到达结尾。 如果发生错误 preg_match() 返回 FALSE 。
if(preg_match(‘/[^a-z]/i‘, $name))
{
throw new Exception("$name contains character other than a-z A-Z");
}
if(strpos(strtolower($name), ‘name‘) !== false)
{
throw new Exception("$name contains the word name");
}
echo "The Name is valid";
}
catch (exception $e)
{
throw new Exception("insert name again", 0, $e);
}
}

catch (exception $e)
{
if($e->getPrevious())
{
echo "The Previous Exception is: " . $e->getPrevious()->getMessage() . "<br/>";
}
echo "The Exception is: " . $e->getMessage() . "<br/>";
}

example04


<?php
/*
When catching an exception inside a namespace it is important that you escape to the global space:
如何逃离出命名空间
*/

namespace SomeNamespace;

class SomeClass {

function SomeFunction() {
try {
throw new Exception(‘Some Error Message‘);
} catch (\Exception $e) {
var_dump($e->getMessage());
}
}

}

//报错:
//Fatal error: Class ‘SomeNamespace\Exception‘ not found in C:\xampp\htdocs\tonglei\index.php on line 8

example05


<?php

//下面的写法会报T_THROW Syntax Error.
someFunction() OR throw new Exception();

//这种写法可以用下面这个正确的形式
function throwException($message = null,$code = null) {
throw new Exception($message,$code);
}

someFunction() OR throwException();

异常处理try-catch-finally

时间: 2024-10-13 03:42:59

异常处理try-catch-finally的相关文章

异常处理 try...catch...finally 执行顺序, 以及对返回值得影响

异常处理 try...catch...finally 执行顺序, 以及对返回值得影响 1.不管有没有出现异常,finally块中代码都会执行:2.当try和catch中有return时,finally仍然会执行:3.finally是在return后面的表达式运算后执行的,所以函数返回值是根据返回类型在finally执行前后确定的:4.finally中最好不要包含return,否则程序会提前退出,返回值不是try或catch中保存的返回值. (一)   一般情况下,程序执行到try里面的内容一定会

C++异常处理 - try,catch,throw,finally的用法

写在前面 所谓异常处理,即让一个程序运行时遇到自己无法处理的错误时抛出一个异常,希望调用者可以发现处理问题. 异常处理的基本思想是简化程序的错误代码,为程序键壮性提供一个标准检测机制. 也许我们已经使用过异常,但是你习惯使用异常了吗? 现在很多软件都是n*365*24小时运行,软件的健壮性至关重要. 内容导读 本文包括2个大的异常实现概念:C++的标准异常和SHE异常. C++标准异常: 也许你很高兴看到错误之后的Heap/Stack中对象被释放,可是如果没有呢? 又或者试想一下一个能解决的错误

C#异常处理“try catch”与vb ”on error goto“

C#跟其他语言一样,在编写代 码的过程中都会或多或少的出现语法或者逻辑上的错误,如果盲目相信自己的技术只能让这些异常的程序继续存在,最终导致系统无法正常运行甚至瘫痪.技术上要 保证代码不出错的同时我们也要给自己留有余地,一般的编程语言都会有异常处理机制,熟练掌握对异常的处理,也是保证我们程序可靠性的前提. 根据前面学习过的vb6.0,的异常处理,在学习c#,的异常处理就很同意理解,原理上都是一样的,只是语法略有区别.vb中我们用的是on error 语句,c#中刚学习了try  catch,这两

C# 异常处理(Catch Throw)IL分析

1.catch throw的几种形式及性能影响: private void Form1_Click(object sender, EventArgs e) { try { } catch { throw; } } private void Form1_Load(object sender, EventArgs e) { try { } catch (Exception) { throw; } } private void Form1_Enter(object sender, EventArgs

Java中的异常处理try catch(第八周课堂示例总结)

异常处理 使用Java异常处理机制: 把可能会发生错误的代码放进try语句块中. 当程序检测到出现了一个错误时会抛出一个异常对象. 异常处理代码会捕获并处理这个错误. catch语句块中的代码用于处理错误. 当异常发生时,程序控制流程由try语句块跳转到catch语句块. 不管是否有异常发生,finally语句块中的语句始终保证被执行. 如果没有提供合适的异常处理代码,JVM将会结束掉整个应用程序. 异常分类: Throwable类有两个直接子类: Exception:出现的问题是可以被捕获的:

异常处理try...catch...catch

package com.day16.Exception; public class ExceptionTwo { public static void main(String[] args) { int a=10; int b=0; int[] arr= {1,2,3,4,5}; try { System.out.println(a/b); System.out.println(arr[10]); } catch (ArithmeticException e) { System.out.prin

T-SQL编程中的异常处理-异常捕获(try catch)与抛出异常(throw)

原文:T-SQL编程中的异常处理-异常捕获(try catch)与抛出异常(throw) 本文出处: http://www.cnblogs.com/wy123/p/6743515.html T-SQL编程与应用程序一样,都有异常处理机制,比如异常的捕获与异常的抛出(try catch throw),本文简单介绍异常捕获与异常抛出在T-SQL编程中的实际使用 . 异常处理简单说明 异常捕获在应用程序编程中非常常见,提供了处理程序运行时出现的任何意外或异常情况的方法刚毕业的时候对于异常处理迷茫不解,

C++中的try throw catch 异常处理

今天在开发过程中调用一个库函数结果库函数有throw操作,当前代码没有对throw进行捕获操作,导致进程在main 函数中捕获到异常导致进程crash.所以借此记录下c++关于try,throw,catch的用法. 程序运行时常会碰到一些异常情况,例如: 做除法的时候除数为 0: 用户输入年龄时输入了一个负数: 用 new 运算符动态分配空间时,空间不够导致无法分配: 访问数组元素时,下标越界:打开文件读取时,文件不存在. 这些异常情况,如果不能发现并加以处理,很可能会导致程序崩溃. 所谓“处理

跟着百度学PHP[11]-PHP当中的异常处理

首先要说一下常见的三种错误: 1.语法错误 2.运行错误 3.逻辑错误 00x1 错误报告及错误级别 PHP的错误分为三个等级 1.注意(notice)   没有变量a 2.警告(warning) 没有给函数传值 3.致命的错误(fatal error) 函数写错 错误的报告级别可以在PHP.ini当中修改.在PHP.ini当中找到错误报告“error_reporting = E_ALL ” 这个的意思是将所有的错误都提示出来.ps:~是除了的意思.&是和的意思.error_reporting

PHP的错误和异常处理

PHP的错误和异常处理 任何程序员在开发时都可能遇到过一些失误,或其他原因造成错误的发生.当然,用户如果不愿意或不遵循应用程序的约束,也会在使用时引起一些错误发生.PHP程序的错误发生一般归属于下列三个领域. Ø  语法错误 语法错误最常见,并且最容易修复.例如,遗漏了一个分号,就会显示错误信息.这类错误会阻止脚本执行.通常发生在程序开发时,可以通过错误报告进行修复,再重新运行. Ø  运行时错误 这种错误一般不会阻止PHP脚本的运行,但是会阻止脚本做希望它所做的任何事情.例如,在调用heade