PHP マニュアル
前のページ | 第 19章クラスとオブジェクト (PHP 5) | 次のページ

# static キーワード

クラスメンバもしくはメソッドを static として宣言することで、 クラスのインスタンス化の必要なしにアクセスすることができます。 static なメンバは、インスタンス化されたクラスオブジェクトから アクセスすることはできません (static なメソッドからは可能です) 。

static 宣言は、可視性の宣言の後に置く必要があります。 PHP 4 との互換性を維持するため、 可視性の宣言が ない場合、そのメンバまたはメソッドは、 `public`として宣言されていると みなされます。

static メソッドは、オブジェクトのインスタンスを生成せずに コールすることができます。疑似変数 `$this` は、 static として宣言されたメソッドの内部から利用することはできません。

実際、`static` メソッドは、コンパイル時に 解決されます。 明示的なクラス名を使用する時、このメソッドはすでに完全に特定されて おり、ルールの継承を行うことはできません。 コールが `self` を伴って行われた場合、 `self` はカレントのクラス、すなわち、 そのコードが属するクラスに変換されます。 ここでもルールの継承は適用されません。

static プロパティは、矢印演算子 -> によりオブジェクトからアクセス することはできません。

static でないメソッドを静的にコールすると、E_STRICT レベルの 警告が発生します。

例 19-15. 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-16. static メソッドの例

`<?php class Foo { public static function aStaticMethod() { // ... } } Foo::aStaticMethod(); ?>`

前のページ | ホーム | 次のページ
スコープ定義演算子 (::) | 上に戻る | オブジェクト定数