ホームページ  >  記事  >  バックエンド開発  >  クラスインスタンス作成時のPHPコンストラクターメソッド呼び出しの問題_PHPチュートリアル

クラスインスタンス作成時のPHPコンストラクターメソッド呼び出しの問題_PHPチュートリアル

WBOY
WBOYオリジナル
2016-07-21 14:54:27994ブラウズ

この記事では、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

tru​​ehttp://www.bkjia.com/PHPjc/364611.html技術記事この記事では、PHP がクラスのインスタンスを作成するときにコンストラクター メソッドを呼び出す際の問題について説明します。 PHP では、Java とは異なり、クラスのインスタンスを作成するときに、最初に親クラスが自動的に呼び出されます (超...
)
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。