Statique

Astuce

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.

Méthodes statiques

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.

Avertissement

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();
?>

Propriétés statiques

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 
To Top