static キーワード
ヒント
このページでは、static
キーワードを使って静的なメソッドやプロパティを定義する方法を説明します。
static
は、
静的な変数の定義
や
静的遅延束縛
にも使えます。これらの場合の static
の使い方は、
それぞれのページを参照ください。
クラスプロパティもしくはメソッドを static として宣言することで、 クラスのインスタンス化の必要なしにアクセスすることができます。 static なプロパティは、インスタンス化されたクラスオブジェクトから アクセスすることはできません (static なメソッドにはアクセスできます)。
PHP 4 との互換性を維持するため、
可視性の宣言が
ない場合、そのプロパティまたはメソッドは、
public
として宣言されていると
みなされます。
static メソッド
static メソッドはオブジェクトのインスタンスを生成せずに
コールすることができるので、疑似変数 $this
は、
static として宣言されたメソッドの内部から利用することはできません。
警告
PHP 5 では、static でないメソッドを静的にコールすると、E_STRICT
レベルの警告が発生します。
警告
PHP 7 では、static でないメソッドを静的にコールすることが非推奨になりました。
E_DEPRECATED
レベルの警告が発生します。
将来的にはサポートされなくなる見込みです。
例1 Static method example
<?phpclass Foo { public static function aStaticMethod() { // ... }}Foo::aStaticMethod();$classname = 'Foo';$classname::aStaticMethod(); // PHP 5.3.0 以降で対応?>
static プロパティ
static プロパティは、矢印演算子 -> によりオブジェクトからアクセス することはできません。
他の PHP 静的変数と同様、
静的プロパティの初期化はリテラルあるいは定数でのみ可能です。
式で初期化することはできません。
PHP 5.6 以降では、同じルールが const
式にも当てはまります。
コンパイル時に評価可能な、限られた式だけしか使えません。
PHP 5.3.0 以降では、変数を用いてクラスを参照することも可能です。
変数の値に (self
や parent
、
static
といった)
キーワードを指定することはできません。
例2 static プロパティの例
<?phpclass 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 print $foo::$my_static . "\n";$classname = 'Foo';print $classname::$my_static . "\n"; // PHP 5.3.0 以降で対応print Bar::$my_static . "\n";$bar = new Bar();print $bar->fooStatic() . "\n";?>