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

水瓶触不可及

水瓶触不可及

2016-01-29 13:00

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

四、 扩展"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');

展开更多 50%)
分享

猜你喜欢

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

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

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

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

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

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

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

PL/SQL数据类型及操作符

编程语言 网络编程
PL/SQL数据类型及操作符

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

JavaScript操作符以及操作符优先级

Web开发
JavaScript操作符以及操作符优先级

C++中点操作符和箭头操作符的使用详解

编程语言 网络编程
C++中点操作符和箭头操作符的使用详解

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

Managed DirectX 相关(DirectX.Capture Class Library && DirectShow.NET)

Managed DirectX 相关(DirectX.Capture Class Library && DirectShow.NET)

Hibernate+Spring+Struts扩展Struts

Hibernate+Spring+Struts扩展Struts
下拉加载更多内容 ↓