メンバまたはメソッドをstaticと宣言することにより、
オブジェクトコンテキストの外部からこれらをコールできるようになります。
staticメンバまたはメソッドはオブへ区のインスタンスである変数から
アクセスすることはできず、クラスを継承することで再定義することも
できません。
static宣言は、可視性の宣言の後に置く必要があります。
PHP 4との互換性を維持するため、
可視性の宣言が
ない場合、そのメンバまたはメソッドは、
public staticとして宣言されていると
みなされます。
staticメソッドは、オブジェクトのインスタンスを生成せずに
コールすることができます。疑似変数$thisは、
staticとして宣言されたメソッドの内部から利用することはできません。
実際、staticメソッドは、コンパイル時に
解決されます。
明示的なクラス名を使用する時、このメソッドはすでに完全に特定されて
おり、ルールの継承を行うことはできません。
コールがselfを伴って行われた場合、
self はカレントのクラス、すなわち、
そのコードが賊するクラス、に変換されます。
ここでもルールの継承は適用されません。
staticプロパティは、矢印演算子->によりオブジェクトからアクセス
することはできません。
例 19-13. staticメンバの例
<?php class Foo { public static $my_static = 'foo';
public function staticValue() { return self::$my_static; } }
class Bar extends Foo { public function fooStatic() { return parent::$my_static; } }
print Foo::$my_static . "\n";
$foo = new Foo(); print $foo->staticValue() . "\n"; print $foo->my_static . "\n"; // Undefined "Property" my_static
// $foo::my_static is not possible
print Bar::$my_static . "\n"; $bar = new Bar(); print $bar->fooStatic() . "\n"; ?>
|
|
例 19-14. staticメソッドの例
<?php class Foo { public static function aStaticMethod() { // ... } }
Foo::aStaticMethod(); ?>
|
|