【PHP/演習問題】トレイト(trait)[2]
問題
次の実行結果になるプログラムを作成してください。
なお、下記条件を満たすものとします。
- 次の表のクラス・トレイトを作成する
- 人間クラスのインスタンスからトレイトで定義したメソッドを全て呼び出す
- 猫クラスのインスタンスからトレイトで定義したメソッドを全て呼び出す
種類 | 名称 | 英記 | 継承 | トレイト | フィールド | メソッド |
---|---|---|---|---|---|---|
トレイト | コミュニケーショントレイト | Communication | – | – | – | ・greeting()
→ 『こんにちは』を出力する。 ・ introduction()
→ 『私の名前は●●です』を出力する ※ 『●●』は$nameフィールドの値 |
トレイト | 運動トレイト | Motion | – | – | – | ・run()
→ 『走る』を出力する ・ jump()
→ 『ジャンプ』を出力する |
抽象クラス | 生物クラス | Creature | – | – | $name | ・コンストラクタ
→ $nameの値を初期化 |
具象クラス | 人間クラス | Person | Creature | Communication
Motion |
– | – |
具象クラス | 猫クラス | Cat | Creature | Motion | – | – |
=== Person ===
こんにちは
私の名前はWatanabe Youです。
走る
ジャンプ
=== Cat ===
走る
ジャンプ
解答例
<?php
trait Communication {
public function greeting() {
echo "こんにちは\n";
}
public function introduction() {
echo "私の名前は".$this->name."です\n";
}
}
trait Motion {
public function run() {
echo "走る\n";
}
public function jump() {
echo "ジャンプ\n";
}
}
abstract class Creature {
public $name;
public function __construct( $name ) {
$this->name = $name;
}
}
class Person extends Creature {
use Communication,Motion;
}
class Cat extends Creature {
use Motion;
}
echo "=== Person ===\n";
$person = new Person('Watanabe You');
$person->greeting();
$person->introduction();
$person->run();
$person->jump();
echo "=== Cat ===\n";
$cat = new Cat('Sea');
$cat->run();
$cat->jump();
?>