L'opérateur de résolution de portée (::)
L'opérateur de résolution de portée (aussi appelé Paamayim Nekudotayim) ou, en termes plus simples, le symbole "double deux-points" (::), fournit un moyen d'accéder aux membres static ou constant, ainsi qu'aux propriétés ou méthodes surchargées d'une classe.
Lorsque vous référencez ces éléments en dehors de la définition de la classe, utilisez le nom de la classe.
Depuis PHP 5.3.0, il est possible de référencer une classe en utilisant une variable. La valeur de la variable ne peut être un mot-clé (e.g. self, parent et static).
Paamayim Nekudotayim pourrait au premier abord sembler être un choix étrange pour nommer un double deux-points. Cependant, au moment de l'écriture du Zend Engine 0.5 (qui faisait fonctionner PHP 3), c'est le nom qui a été choisi par l'équipe Zend. En fait, cela signifie un double deux-points... en hébreu !
Exemple #1 :: en dehors de la définition de la classe
<?php
class MyClass {
const CONST_VALUE = 'Une valeur constante';
}
$classname = 'MyClass';
echo $classname::CONST_VALUE; // Depuis PHP 5.3.0
echo MyClass::CONST_VALUE;
?>
Trois mots-clé spéciaux, self, parent, et static sont utilisés pour accéder aux propriétés ou aux méthodes depuis la définition de la classe.
Exemple #2 :: depuis la définition de la classe
<?php
class OtherClass extends MyClass
{
public static $my_static = 'variable statique';
public static function doubleColon() {
echo parent::CONST_VALUE . "\n";
echo self::$my_static . "\n";
}
}
$classname = 'OtherClass';
$classname::doubleColon(); // Depuis PHP 5.3.0
OtherClass::doubleColon();
?>
Lorsqu'une classe héritant d'une autre redéfinit une méthode de sa classe parente, PHP n'appellera pas la méthode de la classe parente. Il appartient à la méthode dérivée d'appeler la méthode d'origine en cas de besoin. Cela est également valable pour les définitions des constructeurs et destructeurs, la surcharge, et les définitions de méthodes magiques.
Exemple #3 Appel d'une méthode parente
<?php
class MyClass
{
protected function myFunc() {
echo "MyClass::myFunc()\n";
}
}
class OtherClass extends MyClass
{
// Surcharge de la définition parente
public function myFunc() {
// Mais appel de la méthode parente
parent::myFunc();
echo "OtherClass::myFunc()\n";
}
}
$class = new OtherClass();
$class->myFunc();
?>
Voir aussi quelques exemples d'appels statiques.
Version en cache
21/11/2024 22:47:19 Cette version de la page est en cache (à la date du 21/11/2024 22:47:19) afin d'accélérer le traitement. Vous pouvez activer le mode utilisateur dans le menu en haut pour afficher la dernère version de la page.Document créé le 30/01/2003, dernière modification le 26/10/2018
Source du document imprimé : https://www.gaudry.be/php-rf-language.oop5.paamayim-nekudotayim.html
L'infobrol est un site personnel dont le contenu n'engage que moi. Le texte est mis à disposition sous licence CreativeCommons(BY-NC-SA). Plus d'info sur les conditions d'utilisation et sur l'auteur.
Références
Ces références et liens indiquent des documents consultés lors de la rédaction de cette page, ou qui peuvent apporter un complément d'information, mais les auteurs de ces sources ne peuvent être tenus responsables du contenu de cette page.
L'auteur de ce site est seul responsable de la manière dont sont présentés ici les différents concepts, et des libertés qui sont prises avec les ouvrages de référence. N'oubliez pas que vous devez croiser les informations de sources multiples afin de diminuer les risques d'erreurs.