2014-01-20 45 views
1

我創建一個類名爲EX:富創建一個簡單的異常的一類

class foo{ 

function __construct($arg){ 
    if(empty($arg)){ 
     throw new fooException('argument can not be empty'); 
    } 
} 

} 

我試圖不經過任何通過構造這樣

try{ 
$o = new foo(); 
}catch(FooException $e){ 
echo $e->getMessage(); 
} 

我正在創建類錯誤Fatal error: Class 'FooException' not found in .. 我意識到,我需要擴展可能的錯誤異常類,但沒有關於如何在SO中執行此操作的示例。

+0

這是因爲沒有'FooException'類。你的班級只叫'Foo'。有關自定義例外的示例,請參閱下面的答案。 – Shiva

回答

1

以下是定義名爲FooException的自定義Exception的示例。

接下來的類,TestException測試此自定義異常。

<?php 
/** 
* Define a custom exception class 
*/ 
class FooException 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 FooException('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 (FooException $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 
echo "\n\n"; 


// Example 2 
try { 
    $o = new TestException(TestException::THROW_DEFAULT); 
} catch (FooException $e) {  // Doesn't match this type 
    echo "Caught my exception\n", $e; 
    $e->customFunction(); 
} catch (Exception $e) {  // Will be caught 
    echo "Caught Default Exception\n", $e; 
} 

// Continue execution 
var_dump($o); // Null 
echo "\n\n"; 


// Example 3 
try { 
    $o = new TestException(TestException::THROW_CUSTOM); 
} catch (Exception $e) {  // Will be caught 
    echo "Default Exception caught\n", $e; 
} 

// Continue execution 
var_dump($o); // Null 
echo "\n\n"; 


// Example 4 
try { 
    $o = new TestException(); 
} catch (Exception $e) {  // Skipped, no exception 
    echo "Default Exception caught\n", $e; 
} 

// Continue execution 
var_dump($o); // TestException 
echo "\n\n"; 
?> 

來源:http://www.php.net/manual/en/language.exceptions.extending.php 我修改了它爲您FooException

0

我在這裏看到2件事情,首先,你拋出的異常被稱爲「fooException」,然後,你正在捕獲的那個被稱爲「FooException」,這是不正確的,也許是一個錯字?另一件事是,你是否創建了一個名爲「FooException」的類並將其加載到應用程序中?

require_once(path/to/FooExceptionClass.php); 

希望這會有所幫助。