PHP强制对象类型之instanceof操作符(2)

时间:2010-01-13 08:36:01   来源:第二电脑网  作者:第二电脑网

  第二电脑网导读:是否这个对象是相应类的一个实例。当然,我故意使用了上面的术语,这样你就可以看到这个操作符的使用是多么直观。它的基础语法如下:      if (object instanceof class name){    //做一些有用的事情   }        现在,既然你已经了解了这个操作符在PHP 5是如何使用的,那么,为了...
  正文:

三、 使用"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"操作符,这样以来,可以把上面的网页生成器类转换成一部分更为有效的代码片断。我希望你能真正体会到,通过使用这个操作符,对你的类的方法的输入进行过滤的极端重要性,这样就可以免除外来的不正确的数据输入。
来源:http://www.002pc.com/master/College/Programming/PHP/11800.html

收藏到:

关于《PHP强制对象类型之instanceof操作符(2)》文章的评论

共有 0 位网友发表了评论 此处只显示部分留言 点击查看完整评论页面

随机文章

    SQL Error: select * from ***_ecms_article where classid='86' and checked=1 order by rand() limit 10

顶出来的热门

    SQL Error: select * from ***_ecms_article where classid='86' and checked=1 order by diggtop desc,id desc limit 10
站内搜索: 高级搜索

热门搜索: Windows style 系统 tr IP QQ CPU 安装 function 注册 if td