PHP - OOP - 3. メソッド

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

メソッドの記述

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

以前に作成している MyClass.php ファイルを修正して、myMethod という名前のメソッドを定義してみましょう。

<?php
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 にアクセスできます。

メソッドの利用方法も確認しておきましょう。 my_class_runner.php ファイルを以下のように編集します。

<?php
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;
    }

メソッドの定義方法は関数の定義方法とほとんど同じです。function キーワードの前に publicprivate といったアクセス権を付与します。また add メソッドでは引数 $x$number プロパティに加算しています。 add メソッドの中で $number プロパティにアクセスするには $this->number のように記述します。

次に 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 メソッドで結果を出力しています。

つまり 10 + 20 + 30 = 60 という計算をしています。

それではターミナルからプログラムを実行してみましょう。

$ php calc_runner.php
60

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

参考:状態と振る舞い

オブジェクト指向の文脈では、プロパティのことを状態、メソッドのことを振る舞い、などと呼ぶこともあります。これから学習してくように、一般的にオブジェクトの状態への直接的なアクセスは禁止します(カプセル化)。その代わりに、オブジェクトの状態(プロパティ)は、振る舞い(メソッド)を呼び出すことで変化するように実装します。

まとめ

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