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 statiques ou constants ainsi qu'aux �l�ments red�finis par la 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 peut sembler un choix �trange pour un double deux points. Cependant, au moment de l'�criture du Zend Engine 0.5 (fourni avec PHP 3), c'est le nom choisi par le groupe 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;
?>

Deux mots-cl� sp�ciaux, self et parent, sont utilis�s pour acc�der aux membres 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';
echo 
$classname::doubleColon(); // Depuis PHP 5.3.0

OtherClass::doubleColon();
?>

Lorsqu'une classe �tendue red�finit une m�thode de la classe parente, PHP n'appellera pas la m�thode d'origine. 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, les surcharges et les 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
{
    
// D�passement de la d�finition parent
    
public function myFunc() {

      
// Mais appel de la fonction parent
      
parent::myFunc();
      echo 
"OtherClass::myFunc()\n";
  }
}

$class = new OtherClass();
$class->myFunc();
?>