PHPのレイトバインディングについて

リファクタリング楽しいですね!(挨拶)
まあ、ちゃんとしたテスト書いてないので純粋なリファクタリングとは言わないのでしょうが…

今日発見したこと(今更)を備忘録的にまとめ。

レイトバインディング

導入がPHP5.3.0以降だったんですね。
随分前から普通に使えてたイメージでした。
言うまでもなく、継承関係にあるクラスの関数や変数を呼び出すための「::」を使った構文です。

こんな感じ。

<?php
class A
{
const CONSTANT_VALUE = '定数A ';
}

class B extends A
{
const CONSTANT_VALUE = '定数B ';

public function show_const()
{
echo parent::CONSTANT_VALUE;
echo self::CONSTANT_VALUE;
echo static::CONSTANT_VALUE;
}
}

class C extends B
{
const CONSTANT_VALUE = '定数C ';
}

class D extends C
{
const CONSTANT_VALUE = '定数D ';
}

$class = new D();
// 結果は「定数A 定数B 定数D 」と表示される
$class->show_const();

「parent::」で呼び出されたメソッドからみた継承元クラスを、
「self::」で呼び出されたメソッドが属する自分自身のクラスを、
「static::」ではじめに呼び出したクラスを参照することになります。

see also: PHP: 遅延静的束縛 (Late Static Bindings) - Manual