2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【PHP】静的メソッドと動的メソッド

Last updated at Posted at 2021-07-04

#静的・動的の意味
静的:変化がないことで、英語ではstaticと表します。
動的:変化するもののことで、英語ではdynamicと表します。

つまり、静的メソッドでは引数以外のものによって値が変化しないメソッドで 動的メソッドでは引数以外にもインスタンスによって値が変化し得るメソッドのことを言います。

※静的メソッドはインスタンスの影響受けないので、staticでメソッドを定義した場合は$this->プロパティ名といった書き方をするとエラーになります。
$thisはクラス(インスタンス)を指すため

#具体的な例
テストの点数を計算するTestという名前のクラスを作成しました。
$math,$englishという変数で数学と英語の得点を使って計算するものとします。

この場合scoreが静的メソッドになります。
テストの合計点は欠席日数にかかわらず変化しないためです。
一方、total_scoreは欠席日数によって減点されるので動的メソッドになります。

<?php

class Test
{
    // 欠席日数
    public $absence;

    public function __construct($absence)
    {
        $this->absence = $absence;
    }

    // 静的メソッド
    public static function score($math, $english)
    {
        //単純な合計得点
        return $math + $english;
    }

    // 動的メソッド
    public function totalScore($math, $english)
    {
        //欠席日数によって得点を変化
        // 欠席日数が5日以上だったら、30点減点にする
        if ($this->absence >= 5) {
            return ($math + $english) - 30;
        }
        //欠席日数が5日未満なら、減点なし
        return $math + $english;
    }
}

// $absence=10, $math = 80, $english = 60の場合
 $my_test = new Test(10);  //コンストラクタに引数を設定した場合、newするときにも必ず引数を指定する
 echo $my_test->score(80, 60);  //出力結果 140
 echo '<br>';
 echo $my_test->totalScore(80, 60); //出力結果110

#参考サイト
https://fresh-engineer.hatenablog.com/entry/2018/08/23/031829

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?