>  기사  >  백엔드 개발  >  ThinkPHP의 클래스 생성자 _construct()와 _initialize()의 차이점에 대한 자세한 소개

ThinkPHP의 클래스 생성자 _construct()와 _initialize()의 차이점에 대한 자세한 소개

黄舟
黄舟원래의
2018-05-21 11:13:183113검색

이 글에서는 주로 ThinkPHP의 클래스 생성자 _construct()와 _initialize()의 차이점을 소개하고 있습니다. 필요하신 친구들 아래에서 함께 살펴볼까요?

머리말

THINKPHP에 익숙한 php퍼들은 기본적으로 이 방법에 익숙하다고 생각합니다. _initialize()저희는 이 방법을 거의 사용하지 않습니다. _construct() 플러그인을 직접 작성하지 않는 이상 거의 사용되지 않습니다.

오늘 코드를 보다가 문득 _construct()PHP 내장 구축 방법이 눈에 들어왔습니다. 이전에 Java를 배울 때 자주 접했던 것이지만 첫인상은 낯설었습니다. , 오랫동안 사용하지 않았습니다. 기본적으로 잊어 버렸습니다. 평소 지식의 핵심

을 작은 노트에 적는 것이 습관인데, 오랫동안 글을 쓰지 않아서 고등학교 시절의 우아하고 스마트한 글쓰기 스타일이 완전히 사라졌습니다. 다른 차원으로. 이전 생각들과 더불어 기술 전문가들에게 블로그 작성 방법을 배우게 되었습니다. 이는 자랑을 하려는 것이 아니라 시간이 지나면서 제가 작업한 결과물이 모두 사라지는 것을 방지하기 위함입니다. 자세한 소개를 살펴보겠습니다.

먼저 코드를 붙여넣습니다(내 환경은 TP 프레임워크를 사용하는 wamp입니다).

FatherAction.class php 파일이 생성되었습니다.

<?php


class FatherAction extends Action{
  public function construct(){
    echo &#39;father&#39;;
  }
}

?>

SonAction.class.php 파일 생성

<?php


class SonAction extends FatherAction{
  public function construct(){
    echo &#39;son&#39;;
  }
function index(){

}
}

?>

하위 클래스 SonAction에서 index()를 실행하여 출력을 확인합니다.

son

하위 클래스를

<?php


class SonAction extends FatherAction{
   public function construct(){
    parent::construct();
    echo &#39;son&#39;;
   }
  function index(){

  }
}

?>

로 변경하면 실행 결과는

fatherson

위와 같습니다. 결과는 다음과 같습니다. :

은 하위 클래스의 생성자를 실행할 때 상위 클래스의 생성자를 자동으로 호출하지 않습니다. 호출하려면 parent::construct()

When을 추가하세요. 위의 구성 방법을 THINKPHP_initialize() 메서드로 변경하면 결과가 이전 것과 일치한다는 것을 알 수 있습니다. 상위 클래스의 _initialize() 메서드를 실행하려면 다음 문장도 사용해야 합니다. 🎜 >parent::_initialize()

그렇다면 PHP의 내장 생성자

가 THINKPHP의 construct() 메소드와 동일하다는 뜻인가요? _initialize()

먼저 두 개의 코드를 붙여넣습니다:

<?php


class FatherAction extends Action{
  public function construct(){
    echo &#39;father&#39;;
  }
}

?>
rrree

하위 클래스 SonAction의 인덱스 메소드를 실행하면 출력 결과는 father

즉, 하위 클래스는 상위 클래스의 생성자를 호출하지만 하위 클래스의

메서드 _initialize()

를 호출하지 않은 다음

<?php


class SonAction extends FatherAction{
  public function _initialize(){
    echo &#39;son&#39;;
  }


  function index(){

  }

}

?>
<?php


class FatherAction extends Action{
  public function construct(){
    if(method_exists($this,"hello")){
      $this->hello();
    }
    echo &#39;father&#39;;
  }
}

?>
하위 클래스 SonAction 인덱스 메서드를 실행하면 입력 결과가 hellofather

임을 알 수 있습니다. 이로부터 이라는 결론을 내릴 수 있습니다. THINKPHP의 상위 클래스에 생성자가 있고 하위 클래스가 없으면 THINKPHP는 하위 클래스의

를 실행하지 않습니다. THINKPHP의 상위 클래스와 하위 클래스에 모두 생성자가 있는 경우 _initialize() --를 사용해야 합니다. 상위 클래스의 생성자를 호출합니다. ---------------

마찬가지로

parent::construct() THINKPHP의 하위 클래스에 _initialize() 생성자와

가 모두 있는 경우 메서드를 사용하면 하위 클래스만 실행됩니다.

생성자(개인적으로 테스트해 본 결과 위 코드에는 없습니다.) construct_initialize()construct

요약

위 내용은 ThinkPHP의 클래스 생성자 _construct()와 _initialize()의 차이점에 대한 자세한 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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