快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-25
attributes=array(),$data){
  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.''</p>'';
 return $this->output;
}
}
//定义具体类''UnorderedList''-扩展HTMLElement
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.=''<li>''.$item.''</li>'';
  } 
  $this->output.=''</ul>'';
  return $this->output;
 }
}

  如你所见,上面的(X)HTML widget类在生成一个网面中特定的元素时是非常有用的,但是我有意地把每一个类的代码写成这样,这样它们就不能够验证输入参数的有效性。你可能已经想到,输入参数将直接被传递到类构造器中并且作为属性赋值。问题出现了:这样做有什么错误吗?是的,有。现在,我将定义我的最简单的页面生成器类,并且用这样一些widget来填充(feed)它,这样你就可以看到这个类的输入是如何与不正确的对象相混杂。下面是该页面生成器类的签名:

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){
  $this->output.=$htmlElement->getHTML();
 }
 public function doFooter(){
  $this->output.=''</body></html>'';
 }
 public function fetchHTML(){
  return $this->output;
 }
}

  现在,我们开始实例化一些(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($h1);
 $pageGen->addHTMLElement($div);
 $pageGen->addHTMLElement($par);
 $pageGen->addHTMLElement($ul);
 $pageGen->doFooter();
 //显示网面
 echo $pageGen->fetchHTML();
}
c

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