当前位置: 首页 > 图文教程 > 网络编程 > PHP > PHP强制对象类型之instanceof操作符(2)

PHP
PHP新手总结的PHP基础知识
php实现gb2312和unicode间编码转换
用php语言实现数据库连接详细代码介绍
详细解析 PHP 向 MySQL 发送数据过程
利用PHP V5开发多任务应用程序
详细讲解PHP中缓存技术的应用
php escapeshellcmd多字节编码漏洞
《PHP设计模式介绍》导言
《PHP设计模式介绍》第一章 编程惯用法
《PHP设计模式介绍》第二章 值对象模式
《PHP设计模式介绍》第三章 工厂模式
《PHP设计模式介绍》第四章 单件模式
《PHP设计模式介绍》第五章 注册模式
《PHP设计模式介绍》第六章 伪对象模式
《PHP设计模式介绍》第七章 策略模式
《PHP设计模式介绍》第八章 迭代器模式
《PHP设计模式介绍》第九章 观测模式
《PHP设计模式介绍》第十章 规范模式
《PHP设计模式介绍》第十一章 代理模式
《PHP设计模式介绍》第十二章 装饰器模式

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-11-03   浏览: 174 ::
收藏到网摘: n/a

三、 使用"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元素的网页。下面,让我们讨论这是如何实现的。