Diese Seite beschreibt die Verwendung des static
Schlüsselworts, um statische Methoden und Eigenschaften zu definieren.
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
.
Klassenmember oder -methoden als statisch zu deklarieren macht diese zugänglich, ohne dass man die Klasse instantiieren muss. Auf eine als statisch deklarierte Eigenschaft kann nicht mit einem instantiierten Klassenobjekt zugegriffen werden (auf eine statische Methode jedoch schon).
Für die Abwärtskompatibilität zu PHP 4 werden Eigenschaften oder Methoden behandelt,
als ob diese als public static
deklariert wären, wenn
keine Sichtbarkeit
deklariert wird.
Weil statische Methoden ohne die Instanz eines erzeugten Objektes aufrufbar sind, ist die Pseudovariable $this nicht innerhalb von der als statisch deklarierten Methode verfügbar.
In PHP 5 erzeugt ein statischer Aufruf von nicht-statischen Methoden eine
Warnung der Stufe E_STRICT
.
In PHP 7 ist der statische Aufruf von nicht-statischen Methoden missbilligt,
und erzeugt eine Warnung der Stufe E_DEPRECATED
.
Die Unterstützung von statischen Aufrufen nicht-statischer Methoden kann in
der Zukunft entfernt werden.
Beispiel #1 Statisches Methoden-Beispiel
<?php
class Foo {
public static function aStaticMethod() {
// ...
}
}
Foo::aStaticMethod();
$classname = 'Foo';
$classname::aStaticMethod(); // Von PHP 5.3.0 an
?>
Auf statische Eigenschaften kann nicht durch das Objekt mittels des Pfeiloperators -> zugegriffen werden.
Wie bei jeder anderen statischen PHP-Variablen können
als Initialwerte für statische Eigenschaften nur Zeichenketten
und Konstanten zugewiesen werden, die Zuweisung berechneter Ausdrücke
ist nicht möglich. In PHP 5.6 und später gelten die Regeln für const
Ausdrücke:
einige beschränkte Ausdrücke sind möglich, vorausgesetzt dass sie zur
Kompilierzeit ausgewertet werden können.
Beginnend mit PHP 5.3.0 kann die Klasse über eine Variable
referenziert werden. Der Variablenwert kann 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"; // Von PHP 5.3.0 an
print Bar::$my_static . "\n";
$bar = new Bar();
print $bar->fooStatic() . "\n";
?>