Masayan tech blog.

  1. ブログ記事一覧>
  2. 【PHP】new staticとnew selfの違い

【PHP】new staticとnew selfの違い

公開日

staticとselfとは

PHPのstaticselfは静的メソッドで使用することができます。(インスタンス化せずに使用できる。)

結論

selfは記述しているクラス(自クラス)そのものを指します。

staticはプログラムを実行する際のクラスを指します。

具体例

ケース

Monkeyクラスとそれを継承したHumanクラスがあるとします。それぞれのクラスはフィールドに「挨拶の内容(鳴き声)」に関する定数を持っており、greetメソッドで出力することができます。

my-app\app\sample\part1\Monkey.php

<?php

namespace App\Sample\Part1;

class Monkey
{
    protected const GREETING = 'うきー';

    public function greet()
    {
        echo self::GREETING . "\n";
        echo static::GREETING . "\n";
    }
}

my-app\app\sample\part1\Human.php

<?php

namespace App\Sample\Part1;

class Human extends Monkey
{
    protected const GREETING = 'こんにちわ';
}

実行結果

Monkeyクラスからgreetを呼び出す場合は、self、staticいずれにしてもMonkeyクラス自身を指すので、結果は「うきー、うきー」となります。一方、Humanクラスからgreetを呼び出す場合は、selfに関しては、greetメソッドが記述されているクラス(=自クラス)になりますので、自クラス内の定数を参照して「うきー」と出力され、staticに関しては、呼び出しもとのクラスを参照しますので、Humanクラスの定数を"こんにちわ"を出力するという仕組みです。

(new Monkey())->greet(); // うきー,うきー
(new Human())->greet() // うきー,こんにちわ

まとめ

いかがでしたでしょうか。本記事では、人気プログラミング言語であるPHPのnew staticとnew selfの違いについて紹介しています。