Exception
在线手册:中文  英文

Exception::__construct

(PHP 5 >= 5.1.0)

Exception::__construct异常构造函数

说明

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

异常构造函数。

参数

message

抛出的异常消息内容。

code

异常代码。

previous

异常链中的前一个异常。

更新日志

版本 说明
5.3.0 增加previous参数。

注释

Note:

The message is NOT binary safe.


Exception
在线手册:中文  英文

用户评论:

talksonweb at gmail dot com (2013-07-03 21:43:22)

For those that haven't done exception chaining. Here's an example. 

This allows you to add the previous exception to the next one and give yourself detailed information in the end as to what happened. This is useful in larger applications.

<?php
function theDatabaseObj(){
     if( 
database_object ){
         return 
database_object
     }
     else{
         throw new 
DatabaseException("Could not connect to the database");
     }
}

function 
updateProfile$userInfo ){
     try{
         
$db theDatabaseObj();
         
$db->updateProfile();
     }
     catch( 
DatabaseException $e ){
         
$message "The user :" $userInfo->username " could not update his profile information";
         
/* notice the '$e'. I'm adding the previous exception  to this exception. I can later get a detailed view of 
          where the problem began. Lastly, the number '12' is  an exception code. I can use this for categorizing my 
         exceptions or don't use it at all. */ 
         
throw new MemberSettingsException($message,12,$e);
     }
}

try{
     
updateProfile$userInfo );
}
catch( 
MemberSettingsException $e ){
     
// this will give all information we have collected above. 
     
echo $e->getTraceAsString();
}
?>

mattsch at gmail dot com (2012-12-31 15:08:12)

Be aware that while $previous is quite useful in providing exception chaining and better traceability, none of the internal php exceptions (e.g. PDOException, ReflectionException, etc) are called internally within php with $previous in mind.
So if your code throws an exception, recovers from it, then catches one of these internal php exceptions, recovers from it and throws another exception, you will not know the first exception that was thrown when calling getPrevious.
See: https://bugs.php.net/bug.php?id=63873

mario dot mueller at twt dot de (2009-01-30 02:21:47)

This would be nice for handling ZendFramework Exceptions to your own framwork or CMS Exceptions:

<?php
try
{
    
$oZFResponse $oZFHttpClient->request();
}
catch(
Zend_Http_Exception $exZFHttpEx)
{
    throw new 
Runtime_{$oZFHttpEx->getCode()}_Exception('some ErrorMailing Message'500$oZFHttpEx);
}

?>

Regards,
Mario

易百教程