2013-02-18 8 views
0

Так что я читал руководство по php на Расширение Исключения и прочитал пример кода. Мой вопрос о следующем коде: почему var_dump($o) оценивается до null? Это потому, что конструктор класса TestException выдает исключение, следовательно, не позволяет завершить объект? Я почти уверен, что это причина.php manual exception example

Но вот код для исследования:

<?php 
/** 
* Define a custom exception class 
*/ 
class MyException extends Exception 
{ 
    // Redefine the exception so message isn't optional 
     public function __construct($message, $code = 0, Exception $previous = null) { 
    // some code 

    // make sure everything is assigned properly 
    parent::__construct($message, $code, $previous); 
} 

// custom string representation of object 
public function __toString() { 
    return __CLASS__ . ": [{$this->code}]: {$this->message}\n"; 
} 

public function customFunction() { 
    echo "A custom function for this type of exception\n"; 
    } 
} 


/** 
* Create a class to test the exception 
*/ 
class TestException 
{ 
    public $var; 

    const THROW_NONE = 0; 
    const THROW_CUSTOM = 1; 
    const THROW_DEFAULT = 2; 

    function __construct($avalue = self::THROW_NONE) { 

     switch ($avalue) { 
      case self::THROW_CUSTOM: 
       // throw custom exception 
       throw new MyException('1 is an invalid parameter', 5); 
       break; 

      case self::THROW_DEFAULT: 
       // throw default one. 
       throw new Exception('2 is not allowed as a parameter', 6); 
       break; 

      default: 
       // No exception, object will be created. 
       $this->var = $avalue; 
       break; 
     } 
    } 
} 


// Example 1 
try { 
    $o = new TestException(TestException::THROW_CUSTOM); 
} catch (MyException $e) {  // Will be caught 
    echo "Caught my exception\n", $e; 
    $e->customFunction(); 
} catch (Exception $e) {  // Skipped 
    echo "Caught Default Exception\n", $e; 
} 

// Continue execution 
var_dump($o); // Null 
?> 

ответ

0

Have a look at PHP exception from PHP official site.

Пример:

<?php 

class MyException extends Exception { } 

class Test { 
    public function testing() { 
     try { 
      try { 
       throw new MyException('foo!'); 
      } catch (MyException $e) { 
       /* rethrow it */ 
       throw $e; 
      } 
     } catch (Exception $e) { 
      var_dump($e->getMessage()); 
     } 
    } 
} 

$foo = new Test; 
$foo->testing(); 

?>