誰かが私に何の違いを説明できますか
include_once 'classb.php'
class A
{
$a = new B
}
と
class A extends B
{
$a = new B
}
は?
クラスを拡張することと.phpファイルを含めることにはどのような長所/短所がありますか?
ソースinclude_once
ファイルを読み取ります。この場合、おそらくクラス定義が含まB
れています。クラスを継承クラスとしてextends
設定します。つまり、すべてを取得して、その基本構造に対する独自の変更を定義できます。2つの操作の間には実際にはまったく関係がなく、操作は無意味です(構文エラーは言うまでもありません)。A
B
A
B
$a = new B
あなたがより高いレベルの答えを探している場合...
extendsを使用すると、AはBと同様のことを行うようにバインドされますが、A内にBのインスタンスを作成しても、Aに制限はありません。
2番目のアプローチはコンポジションと呼ばれ、高いクラス階層を生成せず、長期的にはより柔軟であるため、OOシステムを構築するための一般的に推奨されるアプローチです。ただし、コードの生成はわずかに遅くなり、extendsを単純に使用するよりも多くなります。
私の2セント
第二に、すなわち拡張、-はクラス操作です。まず、インクルード-はファイル操作です(コンパイル前)。
つまり、2番目は不可能です。最初なしで。
まず、includeは、phpソースファイルを読み取り、includeディレクティブの代わりに記述されたとおりに処理するコマンドです。これは任意のphpソースファイルで使用でき、クラスの継承とは関係ありません。
ちなみに、クラスAのソースコードを含むファイルを含めないと、そのクラスを拡張することはできません。
キーワードextendsを使用してクラスを拡張することは、オブジェクト指向プログラミングの重要な概念である継承の概念を意味します。
いくつかのメソッドでクラス(A)を取得し、動作がわずかに異なる同様のクラス(B)が必要な場合は、クラスAを拡張して、変更する必要のあるメソッドのみを変更する(オーバーライドと呼ばれる)新しいクラスを派生させることができます。新しいものを追加します。
継承とは反対に、構成があります。コンポジションでは、クラスを拡張してその動作を変更するのではなく、目的の動作を取得するためにクラスのパッチワークを実行する必要があります。
ウィキペディアでは、オブジェクト構成と[クラス継承]に関するより良い説明を見つけることができます( http://en.wikipedia.org/wiki/Inheritance_(computer_science))
クラスAを拡張し、同時にそれを構成しようとすると、これらの概念に少し混乱があるようです(ちなみに、正しい構文は$ a = new B();です)。
役立つ参考資料です。明らかに、[Gof、デザインパターン](http://en.wikipedia.org/wiki/Design_Patterns_(book))