PHPは単一継承言語であるため、この問題は、5.4形質この機能の後にPHPを解決するために、2つの基底クラスからプロパティとメソッドを継承することはできません。
PHPのテキスト:形質はPHPの準備に似たコードの再利用単一継承言語のためのメカニズムです。開発者は、異なる階層に自由に別のクラスの多重化方法を可能にする、単一継承言語の制約を低減するために形質。セマンティックな定義とクラスの組み合わせ、複雑さを軽減ミックスインの関連伝統的な典型的な問題や多重継承クラスを回避する方法を特色。
例を参照してください。
1。
トレイト犬{ パブリック $名= 「犬」。 パブリック関数ドライブ(){ エコー「これは、形質犬ドライブです」。 } パブリック関数は、(食べる){ エコー「これは形質犬が食べます」。 } } クラス動物{ パブリック関数ドライブ(){ エコー「これは、クラス動物ドライブです」。 } パブリック関数は、(食べる){ エコー'これは、クラスの動物が食べIS ' ; } } クラスキャット動物{拡張 犬を使用し、 公共の機能ドライブ(){ エコー' これはクラスCATドライブです" ; } } $のCAT = 新しい新しい猫(); $のCAT - > ドライブを(); エコー「<BR> 」; $ CAT - > EAT(); // 出力 // このクラスのCATがドライブである // この特性犬はEATはある // 結論:オーバーライド基本クラス/メソッドは、形質またはプロパティと同じ名前を呼び出します。
2。
形質trait1 { パブリック関数(食べる){ エコー「これは食べるtrait1です」。 } パブリック関数ドライブ(){ エコー「これはtrait1ドライブです」。 } } 形質trait2 { パブリック関数(食べる){ エコー「これは食べるtrait2です」。 } パブリック関数ドライブ(){ エコー「これはtrait2ドライブです」。 } } クラスネコ{ trait1を使用し、trait2 { trait1 :: trait2 insteadof食べます。 trait1 :: trait2 insteadofドライブ。 } } クラス犬{ 使用trait1、trait2 { trait1 :: trait2 insteadof食べます。 trait1 :: trait2 insteadofドライブ。 trait2 ::食べて食べ; trait2 ::ドライブとして駆動します。 } } $猫 = 新しい猫(); $猫 - > ()を食べます。 エコー「<BR> 」。 $猫 - > ドライブ(); エコー「<BR> 」。 エコー「<BR> 」。 エコー「<BR> 」。 $犬 = 新しい犬(); $犬 - > 食べて(); エコー「<BR> 」。 $犬 - > ドライブ(); エコー「<BR> 」。 $犬 - > 食べ(); エコー「<BR> 」。 $犬 - > ドリブン(); これはtrait1ドライブです // これは、EAT trait1 IS // これをtrait1ドライブです // これはEAT trait2 IS // これはtrait2ドライブです // 結論:特色を使用することができ、インターバル、異なる形質が呼ばれ、同じプロパティやメソッドを持って、考え衝突、(置換されていても)を代わりに用いてもよいし、(そのエイリアス)として
3。
動物{トレイト 公共{)(EAT機能を エコー" この動物は、ISをEAT " ; } } クラス{犬 の動物を{使用 EAT AS 保護を; } } クラス{猫 {アニマル使用 動物を:: EAT AS プライベート食べを; } } $犬 = 新しい新しい犬(); // $ DOGは>(食べる); // エラー、食べ保護するために変更されているとして $ CATを = 新新)猫(; $のCATを- > EAT(); // 通常の操作、変更しない元のアクセス制御 の$ cat->食べ(); // エラーが、それは民間のアクセス制御になっている // 結論:あなたはアクセス制御の方法を変更することができるよう
4。
形質猫{ パブリック関数(食べる){ エコー「これは猫を食べています」。 } } 形質犬{ 使用猫。 パブリック関数ドライブ(){ エコー「これは犬のドライブです」。 } 抽象 パブリック関数のgetName()。 公共の機能試験(){ 静的の$ NUM = 0 。 $ NUM ++ ; $ num個のエコー。 } パブリック 静的関数は、{()と言います エコー「これは犬であると言います」。 } } クラス動物{ 犬を使用します。 パブリック関数のgetName(){ エコー「これは動物の名前です」。 } } $の動物 = 新しい動物(); $動物 - > のgetName(); エコー「<BR/> 」。 $動物 - > 食べて(); エコー「<BR/> 」。 $動物 - > ドライブ(); エコー"A " ; $ ::動物は(言う); エコー" " ; $アニマル - > テスト(); エコー" " ; $アニマル - > テスト(); エコー" <BR /> " ; $アニマル - > テスト(); // 出力は // これは、動物の名前です // この猫はEAT // この犬ドライブである // この犬があると言う // 1 // 2 // 3 // 結論:形質は互いに、抽象メソッド、静的プロパティ、静的メソッドと組み合わせることができる等も用いることができます
出典: