インスタンスメソッド
クラスメソッドとは
OOPのメソッドは「歩く」「話す」「戦う」といった、オブジェクトの動作や振る舞いのことを指します。クラスメソッドは、クラス内に定義したメソッドのことを指します。
メソッドの例
項目 | メソッド | 備考 |
---|---|---|
歩く | walk | スピード、方向などでキャラクターを移動する |
話す | talk | 内容、相手などを指定して会話する |
鳴く | cry | キャラクターの能力、武器などから、相手に攻撃する |
インスタンスメソッドの定義
インスタンスメソッドは「修飾子」「メソッド名」「データ型」でクラス内に定義します。PHPの場合、データ型は省略できます。
public class クラス名 {
//インスタンスメソッド
修飾子 メソッド名(): データ型 {
}
}
クラスメソッドの定義
次にユーザの動作として、talk() を定義してみます。
<?php
class Character
{
public string $name;
public string $job;
public int $hp;
public function walk(string $direction): void
{
$message = "{$this->name} move {$direction}";
echo $message, PHP_EOL;
}
}
インスタンスと引数
インスタンスを引数で渡す
作成したインスタンスは、メソッドの引数で渡すことができます。
talk() メソッドの実装
talk() メソッドを追加してみましょう。引数は「Characterオブジェクト」と「文字列」とします。
Character.php
<?php
class Character
{
...
public function talk(Character $character, string $message): void
{
$message = "{$character->name}!{$message}";
echo $message, PHP_EOL;
}
}
talk() メソッドの実行
「character_action.php」で新しいキャラクター「warrior」を作成し、talk() メソッドに渡してみましょう。
character_action.php
...
$warrior = new Character();
$warrior->name = "ボブ";
$warrior->job = "warrior";
$warrior->hp = 50;
$wizard->walk("left");
$wizard->talk($warrior, "勝負しましょう!");
結果
アリス move to left
ボブ!勝負しましょう!
インスタンスの参照
インスタンスはメモリーに保持
作成したインスタンスは、PHPのメモリーに状態を保持されます。
attack() メソッドの実装
attack() メソッドを実装し、引数で渡された Characterオブジェクトの「hp」を計算します。ここでは、damage変数の値だけ引き算しました。
Character.php
public class Character {
...
public void attack(Character character) {
int damage = 1;
character.hp -= damage;
}
}
App.java
...
echo $warrior->hp;
echo PHP_EOL;
$wizard->attack($warrior);
echo $warrior->hp;
echo PHP_EOL;
結果
「warrior」オブジェクトの「hp」の数値が変化しました。
アリス move to left
ボブ!勝負しましょう!
50
49
演習
つぎのプログラムがあります。
Animal.java
<?php
class Animal
{
public string $name;
public string $type;
public string $crying;
public function walk(): void
{
$message = "{$this->name}が歩いた。";
echo $message;
echo PHP_EOL;
}
public function cry(): void
{
echo $this->crying;
echo PHP_EOL;
}
public function escape(): void
{
$message = "{$this->name}が逃げた。";
echo $message;
echo PHP_EOL;
}
}
animal_action.php
<?php
require_once 'models/Animal.php';
$dog = new Animal();
$dog->type = "dog";
$dog->name = 'ポチ';
$dog->crying = 'わん!';
$cat = new Animal();
$cat->type = "cat";
$cat->name = "ミケ";
$cat->crying = "にゃー!";
$dog->walk();
$dog->cry();
$cat->cry();
$cat->escape();
問題1
walk() のことを何といいますか?
1)static変数
2)staticメソッド
3)インスタンス変数
4)インスタンスメソッド
問題2
「AnimalApp.java」を実行した結果はどれですか?
1)わん! ポチが歩いた にゃー!
2)わん! ポチが歩いた にゃー! ミケが逃げた
3)わん! ポチが歩いた ミケが逃げた
4)わん! にゃー! ミケが逃げた