快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-25
a instanceof HTMLElement&&!is_string($data)){
   throw new Exception(''Invalid parameter type'');
  }
  parent::__construct($attributes);
  $this->data=$data;
 }
 //''getHTML()''方法的具体实现
 public function getHTML(){
  foreach($this->attributes as $attribute=>$value){
   $this->output.=$attribute.''="''.$value.''" '';
  }
  $this->output=substr_replace($this->output,''>'',-1);
  $this->output.=($this->data instanceof HTMLElement)?
  $this->data->getHTML():$this->data;
  $this->output.=''</h1>'';
  return $this->output;
 }
}
class Paragraph extends HTMLElement{
 private $output=''<p '';
 private $data;
 public function __construct($attributes=array(),$data){
  if(!$data instanceof HTMLElement&&!is_string($data)){
   throw new Exception(''Invalid parameter type'');
  }
  parent::__construct($attributes);
  $this->data=$data;
 }
 //''getHTML()''方法的具体实现
 public function getHTML(){
  foreach($this->attributes as $attribute=>$value){
   $this->output.=$attribute.''="''.$value.''" '';
  }
  $this->output=substr_replace($this->output,''>'',-1);
  $this->output.=($this->data instanceof HTMLElement)?
  $this->data->getHTML():$this->data;
  $this->output.=''</p>'';
  return $this->output;
 }
}
class UnorderedList extends HTMLElement{
 private $output=''<ul '';
 private $items=array();
 public function __construct($attributes=array(),$items=array()){
  parent::__construct($attributes);
  if(!is_array($items)){
   throw new Exception(''Invalid parameter for list items'');
 }
 $this->items=$items;
}
//''getHTML()''方法的具体实现
public function getHTML(){
 foreach($this->attributes as $attribute=>$value){
  $this->output.=$attribute.''="''.$value.''" '';
 }
 $this->output=substr_replace($this->output,''>'',-1);
 foreach($this->items as $item){
  $this->output.=($item instanceof
  HTMLElement)?''<li>''.$item->getHTML().''</li>'':''<li>''.$item.''</li>'';
 }
 $this->output.=''</ul>'';
 return $this->output;
}
}

  如上面的类所展示的,为了允许在生成相应的网页时实现嵌套的(X)HTML元素,我分别重构了它们的构造器和"getHTML()"方法。请注意,我在每一个类的构造器中包含了下面的条件块:

if(!$data instanceof HTMLElement&&!is_string($data)){
throw new Exception(''Invalid parameter type'');
}

  至此,我实际做的是确保仅有字符串数据和"HTMLElement"类型对象允许作为每一个类的输入参数。否则,将分别由各自方法抛出一个异常,并且有可能导致应用程序的停止执行。所以,这就是对输入数据的检查过程。现在,让我们看一下"getHTML()"方法的新的签名,其中也使用了"instanceof"操作符:

$this->output.=($this->data instanceof HTMLElement)?$this->data-
>getHTML():$this->data;

  如你所见,在这种情况下,对于利用(X)HTML widget类的多态性特征方面this操作符是非常有用的。如果$data属性也是一个widget,那么它的"getHTML()"方法将被正确调用,这会导致显示嵌套的网页元素。另一方面,如果它仅是一个字符串,那么它就被直接添加到当前类的所有输出上。

  至此,为了确保某些对象属于一个特定的类型,你

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号