>  기사  >  백엔드 개발  >  PHP 유형 연산자 "instanceof" 연산자의 확장된 사용

PHP 유형 연산자 "instanceof" 연산자의 확장된 사용

伊谢尔伦
伊谢尔伦원래의
2017-06-21 16:11:211395검색

"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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.