"instanceof" 演算子は、ページの generator クラス に直接挿入される入力オブジェクトの型チェックで適切に機能します。ここで、さらに一歩進んで、(X)HTML ウィジェット クラスのコンストラクターと「getHTML()」メソッドにチェック ルーチンを追加して、他のウィジェットを入力パラメーターとして受け入れられるようにしましょう。以下の改良されたクラスをチェックしてください:
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; } }
上記のクラスが示すように、対応する Web ページを生成するときにネストされた (X)HTML 要素 を実装できるようにするために、それらのコンストラクターと "getHTML(" がそれぞれリファクタリングされました。 )"方法。次の条件ブロックが各クラスのコンストラクターに含まれていることに注意してください:
if(!$data instanceof HTMLElement&&!is_string($data)){ throw new Exception('Invalid parameter type'); }
この時点で実際に行われることは、文字列データと「HTMLElement」タイプのオブジェクトのみが各クラスの入力パラメーターとして許可されることを確認することです。そうしないと、それぞれのメソッドによって例外がスローされ、アプリケーションの実行が停止する可能性があります。これが入力データをチェックするプロセスです。ここで、「instanceof」演算子も使用する「getHTML()」メソッドの新しいシグネチャを見てみましょう:
$this->output.=($this->data instanceof HTMLElement)?$this->data- >getHTML():$this->data;
ご覧のとおり、この場合は (X)HTML ウィジェットを利用するためのものです この演算子クラスのポリモーフィックな機能という点で非常に便利です。 $data 属性もウィジェットである場合、その "getHTML()" メソッドが正しく呼び出され、ネストされた Web 要素が表示されます。一方、それが単なる文字列の場合は、現在のクラスのすべての出力に直接追加されます。
この時点で、特定のオブジェクトが特定の型に属することを保証するために、PHP 5 での "instanceof" 演算子の使用方法を理解できたかもしれません。この記事でわかるように、PHP 5 でオブジェクト型を強制することは、実際には非常に簡単な作業です。現時点では、理解を深めるために、このメソッドを使用して PHP アプリケーション内のオブジェクトをフィルターする例を作成することをお勧めします。
りー
以上がPHP 型演算子「instanceof」演算子の拡張使用の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。