staticとconstはクラスのもの、プロパティはオブジェクトのもの。
追記
コメントでPHP5.3からはstaticキーワードが使えるのを教えてもらった。
勉強しないとダメだなぁ。。
子クラスのconst,staticの値を使うのは、PHP5.3からできます。
var_dump(static::$S);
http://www.php.net/manual/ja/language.oop5.late-static-bindings.php
元記事
久々にconstとか使ってハマってしまった。
オーバーライドせず子供のクラスが親のクラスのメソッドを使う場合に、
constは子供のものが使われると期待してしまった。
<?php class ParentClass { const C = 'parent const'; static public $S = 'parent static'; public $v = 'parent variable'; public function pParent() { var_dump(self::C); var_dump(self::$S); var_dump($this->v); } } class ChildClass extends ParentClass { const C = 'child const'; static public $S = 'child static'; public $v = 'child variable'; } $c = new ChildClass(); $c->pParent();
プロパティはオブジェクトが持ってるものだから子供のものが使われるけど、
constはstaticと同様selfを使うからクラスのものなので親の値が使われると。
string(12) "parent const" string(13) "parent static" string(14) "child variable"