최근 ThinkPHP 프레임워크를 공부하다가 _initialize() 함수를 보고 간단하게 요약을 해봤습니다
구글이나 바이두의 튜토리얼을 잠깐 보다가 느낀 점은 말이 많았는데 모두 테스트 중이었어요~
실험 버전: ThinkPHP 3.2.3, PHP5.6. 하위 클래스에서 상위 클래스와 하위 클래스의 생성자를 동시에 호출할 수 있도록
_initialize() 함수가 등장합니다.
이를 가장 쉽게 파악하는 방법은 가장 신뢰할 수 있는 TP의 소스코드를 공개해 보는 것입니다.
경로: ThinkPHP3.2.3/ThinkPHP/Library/Think/Controller.class.php. (ΔController는 추상 클래스입니다.)
다음을 볼 수 있습니다:
여기서 Controller 추상 클래스는 __construct() 메서드를 재정의합니다. 세 개의 빨간색 선에 집중하세요. 이것은 실제로 _initialize() 메서드에 대한 특별한 선언이 없으며 이를 할당합니다. .특징.
_initialize()가 우연히 __construct()에 있기 때문에 순전히 생성자의 기능을 갖고 있음을 알 수 있습니다. (클래스가 인스턴스화되면 생성자 __construct가 실행됩니다. 현재 클래스가 존재하는 경우 _initialize() 메소드, 부수적으로 실행되는 _initialize())
네이티브 PHP에서 하위 클래스와 상위 클래스의 생성자를 동시에 호출해야 하는 요구 사항을 충족하는 방법을 살펴보겠습니다.
ThinkPHP는 어떻습니까?
요구 사항을 완료하려면 네이티브 코드가 하위 클래스에서 parent::__construct()를 호출하고 실행해야 합니다.
ThinkPHP에서는 부모 클래스를 특별히 처리한 후 _initialize() 자체에서 이 함수를 완료할 수 있습니다. 사실 ThinkPHP의 _initialize 함수의 원래 의도는 부모 클래스와 하위 클래스 구성물을 동시에 호출하는 것인 것 같습니다. 시간. 기능에 사용됩니다.
TP에서 _initialize()와 __construct() 사용 시 주의사항을 정리합니다
_initialize()와 __construct()가 동시에 나타나면 _initialize() __construct()가 다시 작성되었고 _initialize()가 더 이상 호출되지 않기 때문에 유효하지 않습니다.
부모 클래스와 자식 클래스의 생성자를 동시에 호출하려면 부모 클래스의 __construct()에서 이를 처리해야 합니다.
<code>if(method_exists($this,’_initialize’)){ $this -> _initialize(); } </code>
둘 다 하위 클래스로 재정의하거나 다시 작성할 수 없습니다. 그렇지 않으면 상위 클래스와 하위 클래스가 동시에 호출하는 함수가 유효하지 않게 됩니다.
지금으로서는 (ThinkPHP3.2.3), _initialize()는 취약합니다. 예, 결국 수동 처리가 필요합니다. 이 경우 _initialize()의 역할은 명명 제약일 뿐입니다. 다음과 같은 경우 _initialize를 다른 이름으로 변경할 수 있기 때문입니다. 나는 공식이 이후 버전에서 이 기능을 개선할 것이라고 믿습니다.
위 내용은 초기화 및 구성 내용을 포함하여 ThinkPHP 소스 코드의 _initialize 및 __construct에 대한 설명을 소개합니다. PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.