Cette page décrit l'utilisation du mot clé static
qui permet de définir des méthodes et des propriétés statiques.
static
peut aussi être utilisé pour
définir des variables statiques
et pour
finir des liaisons statiques.
Reportez-vous à ces pages pour plus d'informations sur la signification de
static
.
Le fait de déclarer des propriétés ou des méthodes comme statiques vous permet d'y accéder sans avoir besoin d'instancier la classe. Ceci peuvent être accédé statiquement depuis une instance d'objet.
Comme les méthodes statiques peuvent être appelées sans qu'une instance d'objet n'ait été créée, la pseudo-variable $this n'est pas disponible dans les méthodes déclarées comme statiques.
Appeler une méthode non-statique statiquement lancera une Error.
Antérieur à PHP 8.0.0, appeler une méthode non-statique statiquement était obsolète,
et générait un avertissement E_DEPRECATED
.
Exemple #1 Exemple avec une méthode statique
<?php
class Foo
{
public static function aStaticMethod() {
// ...
}
}
Foo::aStaticMethod();
$classname = 'Foo';
$classname::aStaticMethod();
?>
Les propriétés statiques sont accédées en utilisant l'
opérateur de résolution de portée
(::
) et ne peuvent pas être accédé à travers l'opérateur
objet (->
).
Comme toute autre variable statique PHP, les propriétés statiques peuvent
être initialisées avec les mêmes règles que les expressions const
:
certaines expressions limitées sont possibles, à condition qu'elles
puissent être évaluées lors de la compilation.
Il est possible de référencer la classe en utilisant une variable.
La valeur de la variable ne peut être un mot-clé (par exemple self
,
parent
et static
).
Exemple #2 Exemple avec une propriété statique
<?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"; // "Propriété" my_static non définie
print $foo::$my_static . "\n";
$classname = 'Foo';
print $classname::$my_static . "\n";
print Bar::$my_static . "\n";
$bar = new Bar();
print $bar->fooStatic() . "\n";
?>
Résultat de l'exemple ci-dessus en PHP 8 est similaire à :
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