プロジェクトの作業中にいくつかのエラーが発生しました。最終的には、PHP の構築メソッドが問題を引き起こしていました。
PHP5 以降では、オブジェクトの中で __construct コンストラクター メソッドを宣言できます。がインスタンス化されると、このメソッドが呼び出されます。
注意:
1. 継承されたサブクラスにコンストラクター メソッドがなく、親クラスにコンストラクター メソッドがある場合、サブクラスがインスタンス化されると、親クラスのコンストラクター メソッドが暗黙的に呼び出されます。
2. サブクラスにコンストラクターがあり、親クラスにもコンストラクターがある場合、サブクラスは明示的にparent::__construct()を呼び出して親クラスのコンストラクターにアクセスする必要があります。
下位互換性のため、php5 クラスに __construct() メソッドが見つからない場合は、クラス名と同じメソッド名のコンストラクターを探しますが、2 つのコンストラクターが同時に使用されると、E_STRICT レベルが低下する可能性があります。エラー メッセージ:
(次のコードは私の Web 環境です: 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(); ?>
結果: 厳格な標準: D:xampphtdocstest3Class.php の 8 行目でクラス 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.3 以降、クラスと同じ名前のメソッドはクラスとして使用されなくなりました。 php5.3.3 以降を使用している場合、クラスと同じ名前のメソッドをコンストラクターとして使用することはできません:
<?php namespace Foo; class Bar { public function Bar() { // PHP 5.3.0-5.3.2 是构造方法 // PHP 5.3.3 被当做是正常的方法使用 } } ?>
2 つのコンストラクターを使用する必要がある場合同時に 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(); ?>