【PHP/演習問題】トレイト(trait)[2]

【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();


?>