staticとselfとは
PHPのstatic
とself
は静的メソッドで使用することができます。(インスタンス化せずに使用できる。)
結論
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の違いについて紹介しています。