⊗ppOpTrInr 77 of 107 menu

PHPにおけるオブジェクト指向プログラミングのトレイト

ご存知のように、PHPでは複数のクラスから一度に継承することはできません。継承できるのは一つのクラスからのみです。以前、この問題の解決策として、継承の代わりにあるクラスのオブジェクトを別のクラス内で使用する方法を学びました。

PHPには別の方法もあります。それはトレイトの使用です。トレイトは、他のクラスに組み込むことができるプロパティとメソッドのセットを表します。この時、トレイトのプロパティとメソッドは、クラスによってあたかも自身のものであるかのように認識されます。

トレイトの構文はクラスと同じですが、トレイト名はキーワードtraitを使用して宣言する点が異なります。

トレイトのインスタンスを作成することはできません。トレイトは他のクラスへの接続のみを目的としています。接続自体はコマンドuseを使用して行われ、その後にスペースを置いて接続するトレイトの名前を指定します。このコマンドはクラスの先頭に記述します。

では、実際の例でトレイトの適用を見てみましょう。ここに、プライベートプロパティnameage、およびそれらのゲッターを含むHelperというトレイトがあるとします。

<?php trait Helper { private $name; private $age; public function getName() { return $this->name; } public function getAge() { return $this->age; } } ?>

また、コンストラクタ内でプロパティnameageが設定されるUserクラスがあるとします。

<?php class User { public function __construct($name, $age) { $this->name = $name; $this->age = $age; } } ?>

では、Userクラスのプロパティに対してゲッターを追加しましょう。ただし、クラス内に直接記述するのではなく、これらのメソッドがすでに実装されているトレイトHelperを接続するだけにします。

<?php class User { use Helper; // トレイトを接続 public function __construct($name, $age) { $this->name = $name; $this->age = $age; } } ?>

トレイトを接続した後、クラスにはそのトレイトのメソッドとプロパティが現れます。この時、それらにはあたかもクラス自身のメソッドとプロパティであるかのようにアクセスします。

<?php $user = new User('john', 30); echo $user->getName(); // 'john' と出力 echo $user->getAge(); // 30 と出力 ?>

プロパティnameagepopulation、およびそれらのゲッターを持つCityクラスを実装してください。作成済みのトレイトHelperを使用して、コードを短縮させます。

日本語
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItalianoქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
当サイトでは、サイトの動作、分析、パーソナライゼーションのためにクッキーを使用しています。 データ処理はプライバシーポリシーに従って行われます。
すべて受け入れる 設定 拒否