PHP強制物件類型之instanceof運運算元(2)

日期:2006-09-28  作者:喜騰小二  來源:PHPChina


三、
使用"instanceof"運運算元


  如妳所見,"instanceof"運運算元的使用非常簡單,它用兩個參數來完成其功能。第一個參數是妳想要檢查的物件,第二個參數是類名(事實上是一個介麵名),用於確定是否這個物件是相應類的一個實例。當然,我故意使用了上麵的術語,這樣妳就可以看到這個運運算元的使用是多麼直觀。它的基本語法如下:

if (object instanceof class
name){
 //做一些有用的事情
}

  現在,既然妳已經瞭解了這個運運算元在PHP
5是如何使用的,那麼,為了驗證被傳遞到它的"addHTMLElement()"方法的物件的類型,讓我們再定義相應的網頁生成器類。下麵是這個類的新的簽章,我在前麵已經提到,它使用了"instanceof"運運算元:

class PageGenerator{
 private $output='';
 private $title;
 public
function __construct($title='Default
Page'){
  $this->title=$title;
 }
 public function
doHeader(){
  $this->output='<html><head><title>'.$this->title.'</title></head><body>';
 }
 public
function addHTMLElement($htmlElement){
  if(!$htmlElement instanceof
HTMLElement){
   throw new Exception('Invalid (X)HTML
element');
  }
  $this->output.=$htmlElement->getHTML();
 }
 public
function doFooter(){
  $this->output.='</body></html>';
 }
 public
function fetchHTML(){
  return
$this->output;
 }
}

  請注意,在上麵的類中,為了確定所有傳遞的物件是早些時候定義的"HTMLElement"類的實例,"instanceof"運運算元是如何包含在"addHTMLElement()"方法中的。現在,有可能重開啓新檔置妳前麵看到的網頁,在這種情況下,請確保所有的傳遞到該網頁生成器類的輸入物件都是真正的(X)HTML
widget物件。下麵是相應範例:

try{
 //生成一些HTML元素
 $h1=new
Header1(array('name'=>'header1','class'=>'headerclass'),'Content for H1 element
goes here');
 $div=new Div(array('name'=>'div1','class'=>'divclass'),'Content
for Div element goes here');
 $par=new
Paragraph(array('name'=>'par1','class'=>'parclass'),'Content for Paragraph
element goes here');
 $teststr='This is not a HTML
element';
 //實例化页面生成器類
 $pageGen=new
Page生成器();
 $pageGen->doHeader();
 //新增'HTMLElement'物件
 $pageGen->addHTMLElement($teststr)
//把簡單的字串傳遞到這個方法
 $pageGen->addHTMLElement($h1);
 $pageGen->addHTMLElement($div);
 $pageGen->addHTMLElement($par);
 $pageGen->doFooter();
 //顯示網頁
 echo
$pageGen->fetchHTML();
}
catch(Exception $e){
 echo
$e->getMessage();
 exit();
}

  正如妳在上麵的範例已經看到的,我把一個簡單的測試用字串(並不是一個"HTMLElement"物件)傳遞到該页面生成器類中,這將透過addHTMLElement()"方法抛出一個異常-為特定的"catch"塊所擷取,如下所示:

Invalid (X)HTML
element

  此時,為了確定輸入物件的有效性,我使用了"instanceof"運運算元,這樣以來,可以把上麵的網頁生成器類轉換成一部分更為有效的程式碼片斷。我希望妳能真正體會到,透過使用這個運運算元,對妳的類的方法的輸入進行篩選的極端重要性,這樣就可以免除外來的不正確的資料輸入。

  在展示了"instanceof"運運算元在網頁生成器類內的正確實現後,還有更多的事情要做。類似於我在前麵一篇文章中為PHP
4所編寫的(X)HTML
widget類,我想包含這個運運算元作為它們的"getHTML()"方法的一部分,這樣就可以允許建立生成嵌套的(X)HTML元素的網頁。下麵,讓我們討論這是如何實現的。


<<<返回技術中心

技術文章

站內新聞

我要啦免费统计