프로젝트 작업 중 오류가 발생했습니다. 최종 분석에서 문제를 일으킨 것은 PHP의 생성 방법입니다.
PHP5부터는 클래스에서 __construct 생성 방법을 선언할 수 있습니다. . 개체가 인스턴스화되면 이 메서드가 호출됩니다.
참고:
1. 상속된 하위 클래스에 생성자 메서드가 없지만 상위 클래스에 생성자 메서드가 있는 경우 하위 클래스가 인스턴스화되면 상위 클래스의 생성자 메서드가 암시적으로 호출됩니다.
2. 하위 클래스에 생성자가 있고 상위 클래스에도 생성자가 있는 경우 하위 클래스는 명시적으로 parent::__construct()를 호출하여 상위 클래스의 생성자에 액세스해야 합니다.
이전 버전과의 호환성을 위해 php5 클래스에 __construct() 메소드가 없으면 클래스 이름과 동일한 메소드 이름을 가진 생성자를 찾지만 두 생성자가 동시에 사용되는 경우 , E_STRICT 수준 오류 메시지가 발생할 수 있습니다.
(다음 코드는 내 웹 환경입니다: win32+php5.3.8+apache2.2 테스트)
<?php class B{ //构造器 public function B(){ echo 'this is B()'; } public function __construct(){ echo 'this is __construct()'; } public function other(){ //do something } } $b = new B(); ?>
결과: 엄격한 표준: 재정의 8행의 D:xampphtdocstest3Class.php에 클래스 B에 대한 생성자가 이미 정의되어 있습니다.
이것은 __construct()입니다.
그러나 메소드의 위치를 변경하면 다른 결과가 발생합니다.
<?php class X{ //构造器 public function __construct(){ echo 'this is __construct()'; } public function X(){ echo 'this is X()'; } public function other(){ //do something } } $x = new X(); ?>
사실 php5.3부터는 클래스와 같은 이름의 메소드가 더 이상 클래스의 생성자로 사용되지 않으며, php5.3.3을 사용하는 경우에도 마찬가지입니다. 이상에서는 클래스와 이름이 같은 메소드를 생성자로 사용할 수 없습니다.
<?php namespace Foo; class Bar { public function Bar() { // PHP 5.3.0-5.3.2 是构造方法 // PHP 5.3.3 被当做是正常的方法使用 } } ?>
php5.3.3 이상에서 두 개의 생성자를 동시에 사용해야 하는 경우 이렇게 하면 됩니다. :
<?php class Y{ //构造器 public function __construct(){ self::Y(); } public function Y(){ echo 'this is __construct() called Y()'; // do init } public function other(){ //do something } } $y = new Y(); ?>