PHP - OOP - 3. メソッド

引き続きクラスの定義について学習していきましょう。ここではメソッドについて取り上げます。

メソッドの記述

メソッドとはクラスの中に定義する関数のことです。

class MyClass
{
    public $myProperty;

    public function myMethod($x)
    {
        echo $this->myProperty . " " . $x;
    };
}

上記のようにクラス定義の {} の中に関数を定義するとメソッドになります。メソッドはプロパティと同様に function キーワードの前に publicprivate といったアクセス権を合わせて記述します。

またメソッドの中では関数と同様に引数にアクセスすること以外にも、クラスに定義されているプロパティにもアクセスできます。

    public function myMethod($x)
    {
        echo $this->myProperty . " " . $x;
    };

上記の myMethod メソッドでは $this という変数を使って $myProperty プロパティにアクセスしています。この $this という変数はメソッドの中で利用できる特殊な変数で、この場合の $this は「自分自身(インスタンス自身)」というように解釈すると良いでしょう。そのため $this->myProperty とすることでインスタンスの持つ $myProperty にアクセスできます。

メソッドの利用方法も確認しておきましょう。

require_once("MyClass.php");

$myClass = new MyClass();
$myClass->myProperty = "Hello";
$myClass->myMethod("Andy"); #=> Hello Andy

上記のようにメソッド(厳密には非 static なメソッド)にアクセスするには予め new 演算子によってクラスからインスタンスを生成しておく必要があります。メソッドを呼び出す場合もプロパティにアクセスする場合と同様に -> (アロー演算子)を使います。

PHPプログラムの開発(addメソッド、showメソッド)

ここでは簡単な計算機クラス( SimpleCalc クラス)に add メソッド、 show メソッドをを追加します。

<?php
class SimpleCalc
{
    public $number;

    public function add($x)
    {
        $this->number = $this->number + $x;
    }

    public function show()
    {
        echo $this->number . PHP_EOL;
    }
}

add メソッドは計算機の加算機能( addメソッド )、 show メソッドは答えを表示する機能( showメソッド )です。

まずは add メソッドを見てみましょう。

    public function add($x)
    {
        $this->number = $this->number + $x;
    }

add メソッドでは引数 $x$number プロパティに加算しています。 $number プロパティは $this 変数を使うことでアクセスできます。

次に show メソッドです。

    public function show()
    {
        echo $this->number . PHP_EOL;
    }

show メソッドでは echo 命令を使って $number プロパティを改行コード付きで出力しています。

続いて実行用のプログラム( calc_runner.php )を修正します。

<?php
require_once("SimpleCalc.php");

$calc = new SimpleCalc();

$calc->number = 10;

$calc->add(20);
$calc->add(30);
$calc->show();

ここでは SimpleCalc クラスのインスタンスを生成して、インスタンスの持つ $number プロパティに 10 を代入しています。それから $calc 変数に対して add メソッドを2回呼び出した後、 show メソッドで結果を出力しています。

それではコマンドラインからプログラムを実行してみましょう。

$ php calc_runner.php
60

実行結果から $number プロパティの初期値 10 に対して add メソッドによって +20+30 と加算された結果が show メソッドによって 60 と出力されているのがわかります。

状態と振る舞い

オブジェクト指向の文脈では、プロパティのことを状態、メソッドのことを振る舞い、などと呼ぶこともあります。オブジェクトの状態(プロパティ)は、振る舞い(メソッド)を呼び出すことで変化します。

まとめ

  • メソッドとはクラスの中に定義した関数のこと
  • メソッドの内部では、引数だけでなく $this 変数によってインスタンスの持つプロパティにもアクセスできる
  • インスタンスのメソッドにアクセスするには -> アロー演算子を使う