📘

PHP Class 練習問題(ex03)

2023/06/06に公開

1

1 - 1

以下のプロパティを持つ、「Person」という名前のクラスを作成しなさい

  • 名前 name
  • 年齢 age

1 - 2

「Person」クラスに、下記のフォーマットで名前と年齢を表示するメソッド「displayInfo」を追加しなさい。

名前: <名前>, 年齢: <年齢>

1 - 3

「Person」クラスを使用して、新しいインスタンスを作成し、名前を「John」とし、年齢を25としなさい。

その後、インスタンスの「displayInfo」メソッドを呼び出して、名前と年齢を表示せよ。

答えと解説
class Person {
    public $name;
    public $age;
    
    public function displayInfo() {
        echo "名前: " . $this->name . ", 年齢: " . $this->age;
    }
}

$person = new Person();
$person->name = "John";
$person->age = 25;
$person->displayInfo();

答え

名前: John, 年齢: 25
  1. クラスの定義
  2. インスタンスの作成
  3. インスタンスのプロパティに値を代入
  4. インスタンスのメソッドを呼び出し
    5. メソッドの中で、インスタンスのプロパティを参照

が理解できていればOK

2

2 - 1

以下のプロパティを持つ、「Car」という名前のクラスを作成しなさい

  • ブランド(brand)
  • 車種(model)
  • 価格(price)

2 - 2

下記機能を持つ「Car」クラスのコンストラクタを作成せよ

  • 指定したブランドでブランド(brand)プロパティを初期化する
  • 指定した車種で車種(model)プロパティを初期化する
  • 指定した価格で価格(price)プロパティを初期化する

2 - 3

「Car」クラスに、車の情報を表示するメソッド「displayCarInfo」を追加しなさい。

ブランド: <brand>  車種:<model>  価格: <price> 円

2 - 4

「Car」クラスを使用して、新しいインスタンスを作成し、ブランドを「Toyota」、車種を「Camry」、価格を25000としなさい。
その後、インスタンスの「displayCarInfo」メソッドを呼び出して、車の情報を表示せよ。

2 - 5

「Car」クラスを使用して、新しいインスタンスを作成し、ブランドを「Honda」、車種を「Civic」、価格を20000としなさい。

答えと解説
class Car{
    public $brand;
    public $model;
    public $price;

    public function __construct($brand, $model, $price) {   
        $this->brand = $brand;
        $this->model = $model;
        $this->price = $price;
    }

    public function displayCarInfo(){
        echo "ブランド: " . $this->brand . "  車種: " . $this->model . " 価格: " . $this->price;
    }

}

$car1 = new Car("Toyota", "Camry", 25000);

$car1->displayCarInfo();

echo "<br>";

$car2 = new Car("Honda", "Civic", 20000);

$car2->displayCarInfo();
  1. クラスの定義
  2. コンストラクタの定義
  3. クラスメソッドの定義
  4. インスタンスの作成
    1. コンストラクタに初期値を代入
  5. インスタンスのメソッドを呼び出し

が理解できていればOK

3

3 - 1

下記のプロパティを持つ、「User」という名前のクラスを作成しなさい。

  • 名前(name)
  • 体力(hp)
  • 攻撃力(attack)
  • 防御力(defense)
  • 役職(role)

3 - 2

「User」クラスに、下記のフォーマットで名前と体力と攻撃力と防御力を表示するメソッド「displayStatus」を追加しなさい。

名前: <名前> 
体力: <体力>
攻撃力: <攻撃力> 
防御力: <防御力>
役職: <役職>

3 - 3

「User」クラスを継承して、「Hero」という名前のクラスを作成しなさい。

3 - 4

「Hero」クラスに下記プロパティを追加し、確認するためのメソッド「displayEquipment」を追加せよ。

  • 装備(equipment)
Heroの装備は<装備>です。

3 - 5

「Hero」クラスに下記のような出力がされる「attack」メソッドを追加せよ。

<名前>の攻撃

3 - 6

「User」クラスを継承した「Enemy」という名前のクラスを作成せよ。

3 - 7

「Enemy」クラスに下記プロパティを追加し、確認するためのメソッド「displayMagicType」を追加せよ。

  • 魔法(magic)
<名前>は<魔法>魔法使いです。

3 - 8

下記のフローを実装せよ。

  1. ヒーロークラスのインスタンスを作成せよ
  2. Enemyクラスのインスタンスを作成せよ
  3. ヒーロークラスのインスタンスプロパティに下記項目を設定せよ
    • name: ヒーロー
    • hp: 100
    • attack: 30
    • equipment: 勇者の剣
  4. Enemyクラスのインスタンスプロパティに下記項目を設定せよ
    • name: 魔術師
    • hp: 100
    • attack: 30
    • magic: 炎
  5. ヒーロークラスのインスタンスメソッド「displayStatus」を呼び出せ
  6. Enemyクラスのインスタンスメソッド「displayStatus」を呼び出せ
  7. Enemyクラスのインスタンスメソッド「displayMagicType」を呼び出せ
  8. ヒーロークラスのインスタンスメソッド「displayEquipment」を呼び出せ
  9. ヒーロークラスのインスタンスメソッド「attack」を呼び出せ
答えと解説

class User {
    public $name;
    public $hp;
    public $attack;

    public function displayStatus(){
        echo "名前: " . $this->name . "<br>";
        echo "体力: " . $this->hp . "<br>";
        echo "攻撃力: " . $this->attack . "<br>";
    }
}

class Hero extends User{
    public $equipment;
    public function displayEquipment(){
        echo "装備品: ". $this->equipment ."<br>";
    }

    public function attack(){
        echo $this->name . "の攻撃!<br>";
    }
}

class Enemy extends User{
    public $magic;
    public function displayMagicType(){
        echo $this->name . ": ". $this->magic ."<br>";
    }
}


$hero = new Hero();
$hero->name = "ヒーロー";
$hero->hp = 100;
$hero->attack = 30;
$hero->equipment = "勇者の剣";

$enemy = new Enemy();
$enemy->name = "魔術師";
$enemy->hp = 100;
$enemy->attack = 30;
$enemy->magic = "炎";


$hero->displayStatus();
$enemy->displayStatus();

echo "---------<br>";

$enemy->displayMagicType();
$hero->displayEquipment();

echo "---------<br>";

$hero->attack();

答え

名前: ヒーロー
体力: 100
攻撃力: 30
名前: 魔術師
体力: 100
攻撃力: 30
---------
魔術師: 炎
装備品: 勇者の剣
---------
ヒーローの攻撃!

問題は長いが1つずつ解いていけばできるはず。

ヒーロークラスのインスタンスからは「displayMagicType」は呼び出せず、
Enemyクラスのインスタンスからは「displayEquipment」は呼び出せないことに注意。

Discussion