初めてブログ記事を書きます。
私が言いたいのは、PHP がクラスのインスタンスを作成するときにコンストラクター メソッドを呼び出す問題です。
Java とは異なり、クラスのインスタンスを作成するとき、すべての属性が正しく初期化されることを確認するために、最初に親クラス (スーパークラス) のコンストラクターが自動的に呼び出されます。 PHP は、このクラスのコンストラクターで親クラスのコンストラクターを自動的に呼び出しません。本当に親クラスのコンストラクターを呼び出す必要がある場合は、parent::__construct($params...);
class Base{
function __construct(){
// do sth here ....
}
}
Base を継承する Extender が必要な場合に注意する必要があるのは、
1 の初期化のために親クラスのコンストラクターを呼び出す必要があるかどうかです。親クラスで構築する必要がありますか? メソッドに基づいて、他の拡張操作が実行されます
3. Base 構築メソッドでは初期化アクションは必要ありません。
エクステンダーがケース 1 のみを満たす場合は、親クラスのコンストラクターが要件を完全に満たしており、追加のコーディングを実行する必要がないため、エクステンダーのコンストラクターを省略できます。
エクステンダーがケース 2 を満たす場合は、エクステンダーのコンストラクターでparent::__construct() を呼び出し、最初に初期化してから、いくつかの拡張操作を実行する必要があります
エクステンダーがケース 3 を満たす場合、選択しないこともできます親クラスのコンストラクターを呼び出します。これには 1 つだけ欠陥があります。Extender を展開するときに、拡張クラスが Base コンストラクターの初期化操作を必要とする場合、この時点でのparent::__construct() の呼び出しは Extender コンストラクターのみを呼び出すことができ、Base クラスのメソッド コンストラクターは呼び出すことができません。 .
したがって、サブクラスのコンストラクター内で親クラスのコンストラクターを手動で呼び出す方が良いと個人的には考えています。