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,
définir des fonctions anonymes statiques
et pour des Résolutions statiques à la volée.
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. Celles-ci peuvent alors être accédées 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 (->
).
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