ThinkPHP의 두 함수 초기화()와 constructor()는 모두 생성자로 이해될 수 있습니다. 전자는 TP 프레임워크에 고유하고 후자는 PHP 생성자입니다. 그러면 둘의 차이점은 무엇입니까?
인터넷에서 검색해 보면 둘이 같다는 답변이 많습니다. ThinkPHP에서 초기화는 PHP의 구문과 동일합니다. 그렇다면 왜 tp는 구문을 사용하지 않고 자체적으로 ThinkPHP를 만든다고 말하는 것은 잘못된 것입니다. 초기화 생성자의 버전?
관련 학습 권장 사항: thinkphp
직접 시도해 보시면 둘 사이의 차이점을 알게 될 것입니다.
a.php class a{ function __construct(){ echo 'a'; } }
b.php (참고: 여기 생성자는 parent::__construct();를 호출하지 않습니다.)
include 'a.php'; class b extends a{ function __construct(){ echo 'b'; } } $test=new b();
실행 결과:
b
클래스 b가 클래스를 상속하지만 이를 볼 수 있습니다. a, 출력 결과는 프로그램이 클래스 b의 생성자만 실행하고 상위 클래스의 생성자를 자동으로 실행하지 않았음을 증명합니다.
b.php의 생성자를 parent::__construct()
로 추가하면 달라집니다. parent::__construct()
,就不同了。
include 'a.php'; class b extends a{ function __construct(){ parent::__construct(); echo 'b'; } } $test=new b();
那么输出结果是:
ab
此时才执行了父类的构造函数。
我们再来看看thinkphp的initialize()函数。
BaseAction.class.php class BaseAction extends Action{ public function _initialize(){ echo 'baseAction'; } IndexAction.class.php class IndexAction extends BaseAction{ public function (){ echo 'indexAction'; }
运行Index下的index方法,输出结果:
baseActionindexAcition
可见,子类的_initialize
方法自动调用父类的_initialize方法。而php的构造函数construct,如果要调用父类的方法,必须在子类构造函数显示调用parent::__construct();
rrreee
이때 상위 클래스의 생성자가 실행됩니다. 🎜🎜thinkphp의 초기화() 함수를 다시 살펴보겠습니다. 🎜rrreee🎜🎜🎜Index에서 index 메소드를 실행하면 출력 결과는 다음과 같습니다. 🎜🎜🎜🎜🎜baseActionindexAcition🎜🎜🎜하위 클래스의
_initialize
메소드가 자동으로 _initialize 메소드를 호출하는 것을 볼 수 있습니다. 부모 클래스. PHP의 생성자 구성의 경우 상위 클래스의 메서드를 호출하려면 하위 클래스 생성자에서 parent::__construct();
를 명시적으로 호출해야 합니다. 이것이 초기화와 구성의 차이점입니다. ThinkPHP. 🎜🎜🎜관련 추천: 🎜프로그래밍 비디오 강좌🎜🎜🎜위 내용은 ThinkPHP에서 초기화와 구성의 차이점 이해의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!