PHP强制对象类型之instanceof操作符
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)){ 至此,我实际做的是确保仅有字符串数据和"HTMLElement"类型对象允许作为每一个类的输入参数。否则,将分别由各自方法抛出一个异常,并且有可能导致应用程序的停止执行。所以,这就是对输入数据的检查过程。现在,让我们看一下"getHTML()"方法的新的签名,其中也使用了"instanceof"操作符: $this->output.=($this->data instanceof HTMLElement)?$this->data- 如你所见,在这种情况下,对于利用(X)HTML widget类的多态性特征方面this操作符是非常有用的。如果$data属性也是一个widget,那么它的"getHTML()"方法将被正确调用,这会导致显示嵌套的网页元素。另一方面,如果它仅是一个字符串,那么它就被直接添加到当前类的所有输出上。 至此,为了确保某些对象属于一个特定的类型,你 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |