La documentation suivante n'est valable que pour PHP 4.
Parfois, il est pratique de faire référence aux fonctions
est variables d'une classe de base, ou bien d'utiliser
des méthodes de classes qui n'ont pas encore d'objets
créés. L'opérateur :: est là pour ces
situations.
<?php
class A {
function example() {
echo "Je suis la fonction originale A::example().<br>\n";
}
}
class B extends A {
function example() {
echo "Je suis la fonction redéfinie B::example().<br>\n";
A::example();
}
}
// Il n'y a pas d'objets de classe A.
// L'affichage est :
// Je suis la fonction originale A::example().<br>
A::example();
// Création d'un objet de la classe B.
$b = new B;
// L'affichage est :
// Je suis la fonction redéfinie B::example().<br>
// Je suis la fonction originale A::example().<br>
$b->example();
?>
Les exemples ci-dessus appellent la fonction example() dans la
classe A, mais il n'y a pas encore d'objet de classe A, alors il
n'est pas possible d'écrire $a->example(). A la place, on appelle
la fonction example() comme une fonction de classe, c'est-à-dire
avec le nom de la classe elle-même, et sans objet.
Il y a des fonctions de classe, mais pas de variables de classe.
En fait, il n'y a aucun objet au moment de l'appel de la fonction.
Donc, une fonction de classe ne peut accéder à aucune variable
(mais elle peut accéder aux variables locales et globales).
Il faut proscire l'utilisation de $this.
Dans l'exemple ci-dessus, la classe B redéfinit la fonction example().
La définition originale dans la classe A est remplacée par celle de
B, et n'est plus accessible depuis B, à moins que vous n'appeliez
spécifiquement la fonction example() de la classe A avec l'opérateur
::. Ecrivez A::example() pour cela (en fait, il faudrait écrire
parent::example(), comme expliqué dans la section suivante).
Dans ce contexte, il y a un objet courant, qui peut avoir d'autres
variables objets. De ce fait, lorsqu'il est utilisé depuis une méthode
d'un objet, vous pouvez utiliser $this.