程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> 具有新特性的PHP5之異常處理機制

具有新特性的PHP5之異常處理機制

編輯:關於PHP編程


  php(做為現在的主流開發語言)5之前的錯誤處理
  在php(做為現在的主流開發語言)5之前的程序錯誤處理多使用以下三種辦法:
  1.使用trigger_error()或die()函數來生成一個腳本層次的警告(warning)或致命錯誤(fatal error);
  
  2.在類方法或函數中返回一個錯誤標記(如false),也可能設置一個之後可以檢查的屬性或全局變量(如$error),然後在適合的地方檢驗其值再決定是否繼續執行程序(如if($error==1){});
  
  3.使用PEAR處理錯誤;
  
  (一)使用die()或trigger_error()
  你可以使用die()函數來結束程序運行。以下是一個簡單的類,它嘗試從一個目錄中加載一個類文件。
  <? 代碼列表 index.php(做為現在的主流開發語言) ?>
  
  <?php(做為現在的主流開發語言)
  // php(做為現在的主流開發語言) 4
  require_once(cmd_php(做為現在的主流開發語言)4/Command.php(做為現在的主流開發語言));
  class CommandManager {
  var $cmdDir = "cmd_php(做為現在的主流開發語言)4";
  
  function getCommandObject($cmd) {
  $path = "{$this->cmdDir}/{$cmd}.php(做為現在的主流開發語言)";
  if (!file_exists($path)) {
  die("Cannot find $path ");
  }
  require_once $path;
  
  if (!class_exists($cmd)) {
  die("class $cmd does not exist");
  }
  
  $ret = new $cmd();
  if (!is_a($ret, Command)) {
  die("$cmd is not a Command");
  }
  return $ret;
  }
  }
  ?>
  
  這是一個用php(做為現在的主流開發語言)實現“Command Pattern設計模式”的簡單例子(請參看《Java與模式》)。使用這個類的程序員(客戶程序員client coder)可以將一個類放到目錄中(例中為cmd_php(做為現在的主流開發語言)4目錄)。一旦文件和其中包含的類同名,並且這個類是Command類的子類,我們的類方法將生成一個可用的Command對象。Command類中定義了一個 execute()方法用來執行找到的命令,即 getCommandObject()方法返回的對象將執行execute().
  
  我們再看看父類Command類,我們將它存在cmd_php(做為現在的主流開發語言)4/Command.php(做為現在的主流開發語言)文件中。
  
  <? 代碼列表cmd_php(做為現在的主流開發語言)4/Command.php(做為現在的主流開發語言) ?>
  
  <?php(做為現在的主流開發語言)
  // php(做為現在的主流開發語言) 4
  class Command {
  function execute() {
  die("Command::execute() is an abstract method");
  }
  }
  ?>
  
  你可以看到,Command是php(做為現在的主流開發語言)4中抽象類的實現,我們無法直接將其實例化,而必須先從中派生中子類然後再實例化。當我們使用php(做為現在的主流開發語言)5後,我們可以使用更好的方式—使用abstract關鍵字將類和方法聲明為“抽象”:
  
  <? 代碼列表 ?>
  
  <?php(做為現在的主流開發語言)
  // php(做為現在的主流開發語言) 5
  abstract class Command {
  abstract function execute();
  }
  ?>
  
  
  下面是對上面的抽象類的實現,覆寫了execute()方法,在其中加入真正可以執行的內容。這個類命名為realcommand,可以在cmd_php(做為現在的主流開發語言)4/realcommand.php(做為現在的主流開發語言)文件中找到。
  
  <? 代碼列表 cmd_php(做為現在的主流開發語言)4/realcommand.php(做為現在的主流開發語言) ?>
  
  <?php(做為現在的主流開發語言)
  // php(做為現在的主流開發語言) 4
  require_once Command.php(做為現在的主流開發語言);
  class realcommand extends Command {
  function execute() {
  print "realcommand::execute() executing as ordered sah! ";
  }
  }
  ?>
  
  使用這樣的結構可以使代碼變得很靈活。你可以在任何時候增加新的Command類,而不需要改變外圍的框架。但是你不得不注意一些潛在的中止腳本執行的因素。我們需要確保類文件存在,並且在文件中該類存在,並且該類是Command的子類(就像realcommand一樣)。
  
  在例子中,如果我們嘗試尋找類的操作失敗,腳本執行將會中止,這體現了代碼的安全性。但這段代碼不靈活,沒有足夠的彈性。極端的反映是類方法只能進行積極正面的操作,它只負責找出和實例化一個Command對象。它無法處理更大范圍內腳本執行的錯誤(當然它也不應該負責處理錯誤,如果我們給某個類方法加上太多與周邊代碼的關聯,那麼這個類的重用將會變得困難,不易擴展)。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved