この記事では、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 クラスのメソッド コンストラクターは呼び出すことができません。 .
なので、サブクラスのコンストラクター内で親クラスのコンストラクターを手動で呼び出す方が良いと個人的には思います。
http://www.bkjia.com/PHPjc/364611.html
)