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

PHP
坏狼php学习 计数器实例代码
PHP学习一(基础)
PHP学习 运算符与运算符优先级
PHP学习 mysql
用PHP伪造referer突破网盘禁止外连的代码
php utf-8转unicode的函数
php代码出现错误分析详解
PHP伪静态写法附代码
PHP伪静态页面函数附使用方法
php下汉字转化为拼音的代码
js下函数般调用正则的方法附代码
php 前一天或后一天的日期
php 在线打包_支持子目录
php GD绘制24小时柱状图
php下检测字符串是否是utf8编码的代码
php5中date()得出的时间为什么不是当前时间的解决方法
[原创]效率较高的php下读取文本文件的代码
php文本操作方法集合比较
PHP远程连接MYSQL数据库非常慢的解决方法
PHP写入WRITE编码为UTF8的文件的实现代码

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


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

四、 扩展"instanceof"操作符的使用:嵌套(X)HTML widget

  好。你已经看到了"instanceof"操作符在被直接注入到页面生成器类的输入对象进行类型检查方面所表现出的良好功能。现在,我将再进一步来把一个检查例程添加到(X)HTML widget类的构造器和"getHTML()"方法中,这样它们可以接受其它的widget作为输入参数。请检查下面改进的类:

class Div extends HTMLElement{
 private $output='<div ';
 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.='</div>';
  return $this->output;
 }
}
class Header1 extends HTMLElement{
 private $output='<h1 ';
 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.='</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');