このページでは、static
キーワードを使って static メソッド や
static プロパティを定義する方法を説明します。
static
は、
static 変数
や
遅延静的束縛
にも使えます。これらの場合の static
の使い方は、
それぞれのページを参照ください。
クラスプロパティもしくはメソッドを static として宣言することで、 クラスのインスタンス化の必要なしにアクセスすることができます。 static として宣言されたプロパティやメソッドは、 インスタンス化されたオブジェクトの内部からも :: (スコープ定義演算子) を使ってコールできます。
static メソッドはオブジェクトのインスタンスを生成せずに コールすることができるので、疑似変数 $this は、 static として宣言されたメソッドの内部から利用することはできません。
static でないメソッドをstaticメソッドとしてコールすると、 Error がスローされます。
PHP 8.0.0 より前のバージョンでは、
static でないメソッドをstaticメソッドとしてコールすることが非推奨になっており、
E_DEPRECATED
レベルの警告が発生していました。
例1 static メソッドの例
<?php
class Foo {
public static function aStaticMethod() {
// ...
}
}
Foo::aStaticMethod();
$classname = 'Foo';
$classname::aStaticMethod();
?>
static プロパティは、
スコープ定義演算子
を使ってアクセスできますが、
オブジェクト演算子 (->
) を使ってアクセスすることはできません。
変数を用いてクラスを参照することも可能です。
変数の値に (self
や parent
、
static
といった)
キーワードを指定することはできません。
例2 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
print $foo::$my_static . "\n";
$classname = 'Foo';
print $classname::$my_static . "\n";
print Bar::$my_static . "\n";
$bar = new Bar();
print $bar->fooStatic() . "\n";
?>
上の例の PHP 8 での出力は、たとえば以下のようになります。:
foo foo Notice: Accessing static property Foo::$my_static as non static in /in/V0Rvv on line 23 Warning: Undefined property: Foo::$my_static in /in/V0Rvv on line 23 foo foo foo foo