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

tsaz1991

tsaz1991

2016-01-29 13:00

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

三、 使用"instanceof"操作符

  如你所见,"instanceof"操作符的使用非常简单,它用两个参数来完成其功能。第一个参数是你想要检查的对象,第二个参数是类名(事实上是一个接口名),用于确定是否这个对象是相应类的一个实例。当然,我故意使用了上面的术语,这样你就可以看到这个操作符的使用是多么直观。它的基本语法如下:

if (object instanceof class name){
 //做一些有用的事情
}
  现在,既然你已经了解了这个操作符在PHP 5是如何使用的,那么,为了验证被传递到它的"addHTMLElement()"方法的对象的类型,让我们再定义相应的网页生成器类。下面是这个类的新的签名,我在前面已经提到,它使用了"instanceof"操作符:

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){
  if(!$htmlElement instanceof HTMLElement){
   throw new Exception('Invalid (X)HTML element');
  }
  $this->output.=$htmlElement->getHTML();
 }
 public function doFooter(){
  $this->output.='</body></html>';
 }
 public function fetchHTML(){
  return $this->output;
 }
}
  请注意,在上面的类中,为了确定所有传递的对象是早些时候定义的"HTMLElement"类的实例,"instanceof"操作符是如何包含在"addHTMLElement()"方法中的。现在,有可能重新构建你前面看到的网页,在这种情况下,请确保所有的传递到该网页生成器类的输入对象都是真正的(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');
 $teststr='This is not a HTML element';
 //实例化页面生成器类
 $pageGen=new Page生成器();
 $pageGen->doHeader();
 //添加'HTMLElement'对象
 $pageGen->addHTMLElement($teststr) //把简单的字符串传递到这个方法
 $pageGen->addHTMLElement($h1);
 $pageGen->addHTMLElement($div);
 $pageGen->addHTMLElement($par);
 $pageGen->doFooter();
 //显示网页
 echo $pageGen->fetchHTML();
}
catch(Exception $e){
 echo $e->getMessage();
 exit();
}
  正如你在上面的示例已经看到的,我把一个简单的测试用字符串(并不是一个"HTMLElement"对象)传递到该页面生成器类中,这将通过addHTMLElement()"方法抛出一个异常-为特定的"catch"块所捕获,如下所示:

Invalid (X)HTML element
  此时,为了确定输入对象的有效性,我使用了"instanceof"操作符,这样以来,可以把上面的网页生成器类转换成一部分更为有效的代码片断。我希望你能真正体会到,通过使用这个操作符,对你的类的方法的输入进行过滤的极端重要性,这样就可以免除外来的不正确的数据输入。

  在展示了"instanceof"操作符在网页生成器类内的正确实现后,还有更多的事情要做。类似于我在前面一篇文章中为PHP 4所编写的(X)HTML widget类,我想包含这个操作符作为它们的"getHTML()"方法的一部分,这样就可以允许创建生成嵌套的(X)HTML元素的网页。下面,让我们讨论这是如何实现的。

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/php/)
展开更多 50%)
分享

猜你喜欢

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

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

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

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

s8lol主宰符文怎么配

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

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

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

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

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

lol偷钱流符文搭配推荐

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

PL/SQL数据类型及操作符

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

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

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

lolAD刺客新符文搭配推荐

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

关于如何操作其他窗体的控件或变量的方法

关于如何操作其他窗体的控件或变量的方法

Eclipse中使用ANT

Eclipse中使用ANT
下拉加载更多内容 ↓