Developer

【PHP応用】メソッド①
2021.03.31
Lv2

【PHP応用】メソッド①

メソッドとは

メソッドとは、オブジェクト内に定義された関数のことを指します。
関数と同じ文脈で語られることも多いですが、厳密には使い分けがあります。
※関数についてはこちらの記事をご参照ください。
関数とは

まずはサンプルプログラムで比較してみましょう。

■サンプルプログラム

関数

<?php
    function plus($x, $y) {
        return $x + $y;
    }

    $result = plus(1, 2);
    print($result);
?>

メソッド

<?php

    // クラス定義
    class Calculator {
        private $x; // プロパティ
        private $y; // プロパティ

        // メソッド定義
        public function setX($x) {
            $this->x = $x;
        }

        // メソッド定義
        public function setY($y) {
            $this->y = $y;
        }

        // メソッド定義
        public function plus() {
            return $this->x + $this->y;
        }
    }

    
    $calculator = new Calculator(); // インスタンス化
    $calculator->setX(1);           // メソッド呼び出し
    $calculator->setY(2);           // メソッド呼び出し
    $result = $calculator->plus();  // メソッドの結果を変数に代入
    print($result);
?>

どちらも1と2を足して3を表示する、という処理自体は変わりません。
そして処理の書き方は圧倒的に関数の方が簡単にみえます。
ただし、このくらいの処理だけだと実感しにくいですが、大規模開発などの場合はクラスを使用してオブジェクト指向にしたほうが良いことも多いです。
手続き型の書き方とオブジェクト指向の書き方、両方できるのもPHPの特徴です。

■呼び出し方

メソッドはオブジェクト内に定義されると書きました。
では使い方を確認しましょう。

まず、メソッドには必ず持ち主が存在します。
その持ち主がオブジェクトです。
この場合オブジェクトはクラスインスタンスを指します。

基本的な考え方はプロパティとまったく同じです。※プロパティ
図に表してみましたが、staticメソッドはクラスの持ち物、インスタンスメソッドはインスタンスの持ち物、ということができます。

呼び出し方の構文は

クラス名::staticメソッド;

または

インスタンス変数->インスタンスメソッド;

となります。
必ず持ち主を指定してメソッドを呼び出します。

さらに言い換えると、持ち主は主語で、メソッドは動詞に相当します。
「だれが」「~をする」の組み合わせです。
その組み合わせを考えると「どのクラスにどんなメソッドを持たせるべきか」ということが見えてきます。

flyメソッドBirdクラスに定義されている分には違和感ないですが、Humanクラスに定義されていたら感覚的におかしいわけです。
このような実際の感覚に近いかたちで様々なモノを表現できるのがオブジェクト指向です。

■まとめ

  • メソッドはオブジェクト内に定義された関数
  • メソッドには持ち主が存在し、記述する際は持ち主から呼び出す
  • プロパティと同様、staticとインスタンスの違いがある
  • 持ち主が主語、メソッドが動詞にあたり、感覚的に定義する(オブジェクト指向)