PHP Class 練習問題(ex03)
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
- クラスの定義
- インスタンスの作成
- インスタンスのプロパティに値を代入
- インスタンスのメソッドを呼び出し
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();
- クラスの定義
- コンストラクタの定義
- クラスメソッドの定義
- インスタンスの作成
- コンストラクタに初期値を代入
- インスタンスのメソッドを呼び出し
が理解できていれば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
下記のフローを実装せよ。
- ヒーロークラスのインスタンスを作成せよ
- Enemyクラスのインスタンスを作成せよ
- ヒーロークラスのインスタンスプロパティに下記項目を設定せよ
- name: ヒーロー
- hp: 100
- attack: 30
- equipment: 勇者の剣
- Enemyクラスのインスタンスプロパティに下記項目を設定せよ
- name: 魔術師
- hp: 100
- attack: 30
- magic: 炎
- ヒーロークラスのインスタンスメソッド「displayStatus」を呼び出せ
- Enemyクラスのインスタンスメソッド「displayStatus」を呼び出せ
- Enemyクラスのインスタンスメソッド「displayMagicType」を呼び出せ
- ヒーロークラスのインスタンスメソッド「displayEquipment」を呼び出せ
- ヒーロークラスのインスタンスメソッド「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