"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; } }
위의 클래스에서 볼 수 있듯이 해당 웹 페이지를 생성할 때 중첩된 (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()" 메소드가 올바르게 호출되어 중첩된 웹 요소가 표시됩니다. 반면, 단순한 문자열인 경우에는 현재 클래스의 모든 출력에 직접 추가됩니다.
이 시점에서 특정 객체가 특정 유형에 속하는지 확인하기 위해 PHP 5에서 "instanceof" 연산자의 사용법을 이해했을 것입니다. 이 기사에서 볼 수 있듯이 PHP 5에서 객체 유형을 강제하는 것은 실제로 매우 간단한 작업입니다. 지금은 이 방법을 사용하여 PHP 애플리케이션의 개체를 필터링하는 예제를 개발하여 이해를 심화하는 것이 좋습니다.
아아아아
위 내용은 PHP 유형 연산자 'instanceof' 연산자의 확장된 사용의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!