は、誰かがクラスを拡張してPHPに組み込むことの違いは何ですか?
include_once 'classb.php'
class A
{
$a = new B
}
と
class A extends B
{
$a = new B
}
の違いは何であるか私に説明できますか?
クラスの拡張にはどのようなメリットとデメリットがありますか.phpファイルを含めるか?
は、誰かがクラスを拡張してPHPに組み込むことの違いは何ですか?
include_once 'classb.php'
class A
{
$a = new B
}
と
class A extends B
{
$a = new B
}
の違いは何であるか私に説明できますか?
クラスの拡張にはどのようなメリットとデメリットがありますか.phpファイルを含めるか?
include_once
ソースファイルを読み込みます。この場合は、おそらくクラス定義がB
であると考えられます。 extends
は、クラスA
をinheritingクラスB
と設定します。つまり、A
はすべてB
になり、その基本構造に独自の変更を定義できます。 2つの操作の間にはまったく関係はなく、$a = new B
操作は無意味です(構文エラーはもちろんです)。 Aの中にBのインスタンスを作成すると、A.上の任意の制限を課さないのに対し、あなたはより高いレベルの答えを探している場合
...
使用して延びているが、Bと同様に物事を行うに結合します
第2のアプローチは合成と呼ばれ、一般に、クラス階層が高くなく、長期的に柔軟性があるため、OOシステムを構築するための好ましいアプローチです。しかし、それはわずかに遅いコードを生成し、それ以上の単純な拡張の使用よりも。
私の2セント
まず、PHPのソースファイルを読み込み、それがincludeディレクティブの代わりに書かれたとして、それを扱うコマンドであります。どのPHPソースファイルでも使用でき、クラスの継承には関係しません。
ところで、クラスAソースコードを含むファイルを含めないと、そのクラスを拡張することはできません。
キーワードのクラスを拡張するは、オブジェクト指向プログラミングの重要な概念である継承という概念を暗示しています。
いくつかのメソッドでクラス(A)を取得し、同様のクラス(B)をわずかに異なる動作で使用する必要がある場合、クラスAを拡張する新しいクラスを派生させ、変更する必要があるメソッドだけを変更できますを無効にし、を上書きする)、新しいものを追加します。
の相続物には、の組成があります。コンポジションでは、クラスを拡張してその振る舞いを変更するのではなく、目的の動作を得るためにクラスのパッチワークを行う必要があります。ウィキペディアで
あなたは、あなたをより良いobject compositionの説明と[クラスの継承](あなたが、同時に、あなたのクラスAを拡張して、これらの概念にはほとんどconfusioneがあるようですhttp://en.wikipedia.org/wiki/Inheritance_(computer_science))
を見つけることができますそれを構成しようとします(ところで、正しい構文は$ a = new B();です)。
有用な参照は、明らかに、[GOF、設計パターン(http://en.wikipedia.org/wiki/Design_Patterns_(book))
第二の、すなわち、延在 - 級動作である まず、すなわち含むこと - 。()をコンパイルする前に、ファイル操作である
。そう - 。。??。第二は、最初にすることなく、これまでは不可能である低速の拡張または含めている
私はちょうど小さなベンチマークをした、と私は拡張コードが少し遅くなりますことを発見し、あなたが何を意味するのか、このですか? – daniel
AとBでfooを呼び出すとしますfooをBに委譲すると、Compositionアプローチでは2つのメソッド呼び出しに時間がかかります。 AがBを拡張する場合、Aでfooを呼び出すことは1つのメソッド呼び出しとみなされ、クラスが定義されている場合(一度起こる)以外はルックアップの必要はありません。 –