快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-25
atch(Exception $e){
 echo $e->getMessage();
 exit();
}

  在运行上面的PHP代码后,你所得到的结果是一个简单的网页-它包含一些前面创建的(X)HTML对象。这种情况下,如果因某些原因该网页生成器类收到一个不正确的对象并调用它的"addHTML()"方法,那么你很容易理解将会发生的事情。在此,我重新修改了这里的冲突条件-通过使用一个不存在的(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'');
 $ul=new UnorderedList(array (''name''=>''list1'',''class''=>''listclass''),array
(''item1''=>''value1'',''item2''=>''value2'',''item3''=>''value3''));
 //实例化页面生成器类
 $pageGen=new Page生成器();
 $pageGen->doHeader();
 //添加''HTMLElement''对象
 $pageGen->addHTMLElement($fakeobj) //把并不存在的对象传递
到这个方法
 $pageGen->addHTMLElement($div);
 $pageGen->addHTMLElement($par);
 $pageGen->addHTMLElement($ul);
 $pageGen->doFooter();
 // 显示网面
 echo $pageGen->fetchHTML();
}
catch(Exception $e){
 echo $e->getMessage();
 exit();
}

  在这种情况中,如下面一行所显示的:

$pageGen->addHTMLElement($fakeobj)//把不存在的对象传递到这个方法

  一个并不存在的(X)HTML widget对象被传递到该页面生成器类,这样会导致一个致命性错误:

Fatal error: Call to a member function on a non-object in
path/to/file

  怎么样?这就是对传递到生成器类的对象的类型不进行检查的直接惩罚!因此在编写你的脚本时一定要记住这个问题。幸好,还有一个简单的方案来解决这些问题,而且这也正是"instanceof"操作符的威力所在。如果你想要看一下这个操作符是如何使用的,请继续往下读吧。

  三、 使用"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;
 }
}

  请注意

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号