php捕捉错误,PHP 错误捕捉处理 Exception

例外是用来改变的正常流通脚本,如果出现错误指定

什么是异常

在PHP 5中来到一个新的面向对象的方式处理错误。

异常处理是用来改变正常流通的执行代码,如果某一特定的错误(例外)条件发生。这个条件是所谓的一个例外。

这就是通常当一个例外是触发:

目前的代码保存状况

该代码执行将切换到预先确定的(自订)例外处理函数

根据不同的情况下,处理程序就可以恢复执行的代码保存状态,终止脚本执行或继续脚本从一个不同的位置中的代码

我们将表现出不同的错误处理方法:

基本使用例外

创建自定义异常处理

多例外

再扔一个例外

设置顶层异常处理

注:例外只应该用于错误条件,不应该被用来跳转到另一地点的代码在指定点。

基本使用的例外

当一个异常,下面的代码将无法执行, PHP将试图找到匹配的“ catch ”块。

如果一个例外是没有抓住,一个致命的错误将印发了“ Uncaught异常”的消息。

可以尝试抛出一个例外没有赶上它:

<?php //create function with an exception  function checkNum($number)   {   if($number>1)    {    throw new Exception("Value must be 1 or below");    }   return true;   }    //trigger exception  checkNum(2);  ?>
 
 

以上代码将得到一个错误这样的:

Fatal error: Uncaught exception 'Exception'   with message 'Value must be 1 or below' in C:webfoldertest.php:6   Stack trace: #0 C:webfoldertest.php(12):   checkNum(28) #1 {main} thrown in C:webfoldertest.php on line 6
Try, throw and catch
 
为了避免错误从上面的例子中,我们必须创造适当的代码来处理一个例外。

适当的异常代码应包括以下内容:

尝试-函数使用一个例外应在“尝试”区块。如果例外不会触发,代码将继续正常。但是,如果触发的例外,一个例外是“扔”

扔掉-这是你如何触发一个例外。每一个“扔”必须至少有一个“迎头赶上”

抓住-这是一种“ c atch”块撷取一个例外,并创建一个对象含有异常信息

可以尝试触发一个例外有效的代码:

 
 
 
<?php //create function with an exception  function checkNum($number)   {   if($number>1)    {    throw new Exception("Value must be 1 or below");    }   return true;   }    //trigger exception in a "try" block  try   {   checkNum(2);   //If the exception is thrown, this text will not be shown   echo 'If you see this, the number is 1 or below';   }    //catch exception  catch(Exception $e)   {   echo 'Message: ' .$e->getMessage();   }  ?>
 
 
 

以上代码将得到一个错误这样的:

Message: Value must be 1 or below
 
 
 

为例解释说:

上述的程式码罚球一个例外,捕获它:

该checkNum ( )函数创建。它会检查,如果数大于1 。如果是这样,一个异常

该checkNum ( )函数被称为一个“尝试”块

唯一的例外内checkNum ( )函数抛出

在“ catch ”块retrives例外,并创建一个对象(英文)载有异常信息

错误讯息的例外是呼应呼吁$电子商务“ getMessage ( )从物体的例外

然而,有一个方式,这里的“每一个扔必须有一个追赶”的规则是设定一个最高水平异常处理程序来处理错误的漏网之鱼。

-------------------------------------------------- ------------------------------

创建自定义异常处理类

创建自定义异常处理程序相当简单。我们只是创建一个特殊阶层的功能,可以说是一个例外时,发生在PHP 。

类必须有一个延伸的例外类。

自定义异常处理类继承的财产从PHP的异常处理类,你可以添加自定义它的职能。

让我们创造一个例外类别:

<?php class customException extends Exception   {   public function errorMessage()    {    //error message    $errorMsg = 'Error on line '.$this->getLine().' in '.$this->getFile()    .': '.$this->getMessage().' is not a valid E-Mail address';    return $errorMsg;    }   }
$email = "someone@example...com";
try   {   //check if    if(filter_var($email, FILTER_VALIDATE_EMAIL) === FALSE)    {    //throw exception if email is not valid    throw new customException($email);    }   }
catch (customException $e)   {   //display custom message   echo $e->errorMessage();   }  ?>

新的类别是一份旧的例外类的增加errorMessage ( )函数。由于这是一份旧的阶级,它继承了属性和方法从旧的阶级,我们可以使用一流的方法除了像返回发生异常( )和getFile ( )和getMessage ( ) 。

为例解释说:

上述的程式码罚球一个例外,它捕获了自定义异常类:

该customException ( )创建一流的延伸旧的例外类。这样,它继承了所有方法和属性从旧的例外类

该errorMessage ( )函数创建。此函数返回一个错误信息,如果e - mail地址是无效的

美元的电子邮件变量设置为一个字符串,不是一个有效的e - mail地址

的“尝试”阻止执行和异常以来, e - mail地址是无效的

在“ catch ”块渔获量的例外,并显示错误讯息

-------------------------------------------------- ------------------------------

多例外

这是可能的脚本来使用多个例外来检查多个条件。

可以使用一些如..其他区块,一个开关,或巢多个例外。这些例外可以使用不同的例外班级和返回不同的错误信息:

<?php class customException extends Exception  {  public function errorMessage()  {  //error message  $errorMsg = 'Error on line '.$this->getLine().' in '.$this->getFile()  .': '.$this->getMessage().' is not a valid E-Mail address';  return $errorMsg;  }  }    $email = "someone@example.com";    try   {   //check if    if(filter_var($email, FILTER_VALIDATE_EMAIL) === FALSE)    {    //throw exception if email is not valid    throw new customException($email);    }   //check for "example" in mail address   if(strpos($email, "example") !== FALSE)    {    throw new Exception("$email is an example e-mail");    }   }    catch (customException $e)   {   echo $e->errorMessage();   }
catch(Exception $e)   {   echo $e->getMessage();   }  ?>
 
 
 

为例解释说:

以上代码测试两个条件和罚球一个例外,如果任何条件没有得到满足:

该customException ( )创建一流的延伸旧的例外类。这样,它继承了所有方法和属性从旧的例外类

该errorMessage ( )函数创建。此函数返回一个错误信息,如果e - mail地址是无效的

美元的电子邮件变量设置为一个字符串,是一个有效的e - mail地址,但包含字符串“榜样”

的“尝试”阻止执行和一个例外是不扔的首要条件

第二个条件触发一个例外,因为电子邮件包含字符串“榜样”

在“ catch ”块渔获量的例外,并显示正确的错误讯息

如果没有customException追赶,只有例外的基础副渔获物,除将处理有

-------------------------------------------------- ------------------------------

再扔例外

有时,当一个异常,你不妨来处理它不同于标准的方式。这是有可能抛出一个例外,第二次在“ catch ”块。

应的脚本系统错误隐藏用户。系统错误可能是重要的编码器,但不感兴趣的用户。为了让您方便的用户可以重新掷的例外与用户友好的讯息:

<?php class customException extends Exception   {   public function errorMessage()    {    //error message    $errorMsg = $this->getMessage().' is not a valid E-Mail address.';    return $errorMsg;    }   }
$email = "someone@example.com";
try   {   try    {    //check for "example" in mail address    if(strpos($email, "example") !== FALSE)     {     //throw exception if email is not valid     throw new Exception($email);     }    }   catch(Exception $e)    {    //re-throw exception    throw new customException($email);    }   }
catch (customException $e)   {   //display custom message   echo $e->errorMessage();   }  ?>
 
 
 

为例解释说:

以上代码的测试,如果电子邮件地址包含字符串“榜样”中,如果这样做,除了重新抛出:

该customException ( )创建一流的延伸旧的例外类。这样,它继承了所有方法和属性从旧的例外类

该errorMessage ( )函数创建。此函数返回一个错误信息,如果e - mail地址是无效的

美元的电子邮件变量设置为一个字符串,是一个有效的e - mail地址,但包含字符串“榜样”

的“尝试”块包含了一个“尝试”块,使其能够重新抛除

唯一的例外是引发自电子邮件包含字符串“榜样”

在“ catch ”块渔获量的例外和再抛出一个“ customException ”

该“ customException ”是捕获和显示错误讯息

如果例外的是没有抓住目前的“尝试”区块,它将寻求一个catch块的“更高水平” 。

-------------------------------------------------- ------------------------------

设置顶层异常处理

该set_exception_handler ( )函数设置一个用户定义的函数来处理所有uncaught例外。

<?php function myException($exception)  {  echo "Exception: " , $exception->getMessage();  }
set_exception_handler('myException');
throw new Exception('Uncaught Exception occurred');  ?>
 
输出如下.
 
 
 
Exception: Uncaught Exception occurred
 
 

在以上代码不存在“ catch ”块。相反,高层引发例外处理。此功能应该用来捕获uncaught例外。

规则的例外

代码可能是包围在try块,以帮助追赶潜力例外

每一个try块或“扔”必须至少有一个与之对应的catch

多个catch可以用来捕获不同的类的例外

例外可以扔(或重新抛出)在catch块在一个try块

一个简单的规则:如果你扔东西,你必须赶上它。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值