Opérateur ::

Attention

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 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 .