中国站长下载-为中国站长提供最好最全的建站资源! 首 页发布资源有事留言繁體中文
设为首页
加入收藏
联系我们
 
您当前的位置:中国站长下载 -> 文章中心 -> 网页编程 -> PHP编程 -> 文章内容  虚拟主机 域名注册 退出登录 用户管理
栏目导航
· ASP编程 · .NET编程
· PHP编程 · JSP编程
· CGI 专区
热门文章
· sndvol32 - sndvol3...
· [组图] FLASH:《大话李白》...
· 个人网站到底能赚多...
· [图文] Rundll.exe是病毒吗...
· [组图] Flash:制作MV
· 价值12万元的网站SE...
· 网站创业者,你需要...
· 一个成功的网站设计...
· [图文] FLASH:韩国导航条解...
· 中国网站的赚钱模式...
相关文章
· PHP强制对象类型之i...
· PHP强制对象类型之i...
· PHP强制对象类型之i...
PHP强制对象类型之instanceof操作符(2)
作者:不详  来源:不详  发布时间:2006-8-14 10:18:52  发布人:chinazhan

 减小字体 增大字体

     如你所见,上面的(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();
  }
  catch(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"操作符的威力所在。如果你想要看一下这个操作符是如何使用的,请继续往下读吧。
  
    做人要厚道,请注明转自chinazhan中国站长(www.ChinaZhan.com)。

 
[] [返回上一页] [打 印] [收 藏]
∷相关文章评论∷    (评论内容只代表网友观点,与本站立场无关!) [更多评论...]
中国站长下载
中国站长下载

本页只接受PR>=4 IT类站点连接,申请连接,谢谢您们的支持!希望我们的下载站能够真正帮到中国的站长们!
关于本站 - 网站帮助 - 广告合作 - 下载声明 - 友情连接 - 网站地图
Copyright © 2005-2006 ChinaZhan.Net. All Rights Reserved .