2016-06-27 60 views
0

我還在玩PHP和OOP。但不明白如何從班級中撤回錯誤。PHP類中的錯誤處理

索引文件

include 'class.php'; 
$test = new magic('', '', '33'); 
$test->getfullname(); 
foreach ($test->get_errors() as $error) { 
    echo $error . '<br>'; 
} 

類:

class magic 
{ 

    private $name; 
    private $surname; 
    private $age; 
    private $errors = array(); 

    function __construct($name, $surname, $age) 
    { 
     $this->name = $name; 
     $this->surname = $surname; 
     $this->age = $age; 
    } 

    public function get_errors() 
    { 
     return $this->errors; 
    } 

    public function getname() 
    { 
     if (!empty($this->name)) { 
      return true; 
     } else { 

      array_push($this->errors, 'Please check name'); 
      return false; 
     } 
    } 

    public function getsurname() 
    { 
     if (!empty($this->surname)) { 
      return true; 
     } else { 

      array_push($this->errors, 'Please check surname'); 
      return false; 
     } 
    } 

    public function getfullname() 
    { 
     if (($this->getname()) && ($this->getsurname())) { 
      echo $this->name . ' ' . $this->surname; 
     } 
    } 

} 

我的問題是,爲什麼當名字或姓氏爲空,則返回請檢查名字或姓氏,但是當兩者都是空的,則返回只有第一?如何在PHP類中對這些類型的錯誤進行蠟燭處理,並且最佳做法是什麼? 我不認爲我可以在這種情況下使用try/catch例外。

+2

短路評價。如果'getName()'返回false,那麼PHP知道你的'&&'不能評價爲真,所以它不會打擾調用'getSurname',因爲它的返回值與確定&&''值無關。 –

+0

@MarcB但一般來說這非常正確? –

+0

http://php.net/manual/en/language.operators.logical.php。請注意示例中的前4個代碼行。 –

回答

2

我建議處理在構造函數中的錯誤,並引發異常。

class magic 
{ 

    /** 
    * @param string $name 
    * @param string $surname 
    * @param int $age 
    * @throws Exception 
    */ 
    public function __construct($name, $surname, $age) 
    { 
     $errors = []; 

     if (empty($name)) { 
      $errors[] = 'Name is required.'; 
     } 

     if (empty($surname)) { 
      $errors[] = 'Surname is required.'; 
     } 

     if (!empty($errors)) { 
      throw new Exception(implode('<br />', $errors)); 
     } 

     $this->name = $name; 
     $this->surname = $surname; 
     $this->age = $age; 
    } 

    public function printFullname() 
    { 
     echo $this->name . ' ' . $this->surname; 
    } 

} 

客戶端:

include 'class.php'; 

try { 
    $test = new magic('', '', '33'); 
    $test->printFullname(); 
} catch (Exception $exc) { 
    echo $exc->getMessage(); //error messages 
}