Schlüsselwort static
Diese Seite beschreibt die Verwendung des Schlüsselworts
static
, mit dem statische Methoden und Eigenschaften
definiert werden. static
kann ebenfalls benutzt werden,
um
statische Variablen zu definieren
und für
späte statische Bindung.
Bitte entnehmen Sie diesen Seiten Informationen zu diesen Bedeutungen von
static
.
Klasseneigenschaften oder -methoden als statisch zu deklarieren, macht diese zugänglich, ohne dass man die Klasse instantiieren muss. Auch innerhalb eines instantiierten Klassenobjekts kann statisch auf sie zugegriffen werden.
Statische Methoden
Weil statische Methoden ohne die Instanz eines erzeugten Objektes aufrufbar sind, ist die Pseudovariable $this nicht innerhalb von Methoden verfügbar, die als statisch deklariert wurden.
Der Aufruf von nicht-statischen Methoden löst einen Error aus.
Vor PHP 8.0.0 wird der statische Aufruf von nicht-statischen Methoden
missbilligt und erzeugt eine Warnung der Stufe
E_DEPRECATED
.
Beispiel #1 Beispiel für statische Methoden
<?php
class Foo {
public static function aStaticMethod() {
// ...
}
}
Foo::aStaticMethod();
$classname = 'Foo';
$classname::aStaticMethod();
?>
Statische Eigenschaften
Auf statische Eigenschaften wird mit dem
Operator zur Auflösung des Gültigkeitsbereichs (::)
zugegriffen. Es kann nicht über den Objektoperator
(->
) darauf zugegriffen werden.
Die Klasse kann über eine Variable referenziert werden. Der Variablenwert
darf dabei kein Schlüsselwort (wie self
,
parent
oder static
) sein.
Beispiel #2 Beispiel für statische Eigenschaften
<?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"; // Undefinierte "Eigenschaft" 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";
?>
Das oben gezeigte Beispiel erzeugt mit PHP 8 eine ähnliche Ausgabe wie:
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