• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • Exception::__construct

    (PHP 5, PHP 7)

    异常构造函数

    说明

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

    异常构造函数。

    参数

    $message

    抛出的异常消息内容。

    $code

    异常代码。

    $previous

    异常链中的前一个异常。

    Note:如果子类的$code 和$message 属性已设置,在调用 Exception 父类的构造器时可以省略默认参数。

    更新日志

    版本说明
    7.0.0$previous参数现在是Throwable类型了。
    5.3.0增加$previous参数。

    注释

    Note:

    The$messageisNOTbinary safe.

    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();
    }
    ?>
    
    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
    Note that the code parameter is not the same as exit($code).
    Also, the code argument in PHP 7 (possibly earlier versions) is cast to an int including negative values. The code below is completely valid:
    <?php
    try
    {
      throw new \Exception('Testing', -12.12);
    }
    catch (\Exception $exception)
    {
      $code = $exception->getCode();
      if ($code < 0)
      {
        exit(abs($code));
      }
    }