No.364
【PHP】self::とstatic::の違い
クラス定数の値が違う…スコープか!
しょっちゅうやってしまうのがクラス定数のスコープ違い。
self
とstatic
は語感的に意味が逆のような気がするんだけど…
self
その定義を記載したClassそのもので定義されているもの。
基底クラスでself::
と記述すると、基底クラスのものを参照する。
継承された派生クラスで定義された値は見ない。
static
その定義を記載したClassそのもので定義されているもの。
基底クラスでstatic::
と記述すると、継承された派生クラスのものを参照する。
派生クラスで未定義の場合は、もちろん基底クラスの値を見る
サンプル
self
では基底クラスの値が表示される。
class hoge {
const STR = 'hoge';
public function disp() {
echo self::STR;
}
}
class fuga {
const STR = 'fuga';
}
$fuga = new fuga();
$fuga->disp();
↓
hoge < 基底クラスhogeの値
static
では派生クラスの値が表示される。
class hoge {
const STR = 'hoge';
public function disp() {
echo static::STR;
}
}
class fuga {
const STR = 'fuga';
}
$fuga = new fuga();
$fuga->disp();
↓
fuga < 派生クラスfugaの値