Classes e Objetos
PHP Manual

Operador de Resolução de Escopo (::)

O Operador de Resolução de Escopo (também chamado de Paamayim Nekudotayim), ou em termos mais simples, dois pontos duplo, é um símbolo que permite acesso a métodos ou propriedades estáticas, constantes, e sobrecarregadas de uma classe.

Ao referenciar estes itens fora da definição da classe, use o nome da classe.

A partir do PHP 5.3.0, é possível referenciar o nome da classe usando uma variável. O valor da variável não pode ser uma palavra-chave (por exemplo, self, parent e static).

Paamayim Nekudotayim pode parecer, de início, uma escolha estranha para chamar dois pontos duplo. No entanto, na hora de escrever a Zend Engine 0.5 (que provia o PHP 3), foi o que a equipe da Zend decidiu. Realmente significa dois pontos duplo - em Hebreu!

Exemplo #1 :: de fora da definição da classe

<?php
class MyClass {
    const 
CONST_VALUE 'Um valor constante';
}

$classname 'MyClass';
echo 
$classname::CONST_VALUE// A partir do PHP 5.3.0

echo MyClass::CONST_VALUE;
?>

Três palavras-chave especiais self, parent e static, são utilizadas para acessar propriedades e métodos dentro de uma definição de classe.

Exemplo #2 :: de dentro da definição da classe

<?php
class OtherClass extends MyClass
{
    public static 
$my_static 'variável estática';

    public static function 
doubleColon() {
        echo 
parent::CONST_VALUE "\n";
        echo 
self::$my_static "\n";
    }
}

$classname 'OtherClass';
echo 
$classname::doubleColon(); // A partir do PHP 5.3.0

OtherClass::doubleColon();
?>

Quando uma subclasse sobrecarrega a definição de um método do pai, o PHP não chamará o método pai. Fica a cargo da subclasse chamar o método pai ou não. Isso também se aplica a definições de métodos Construtores e Destrutores, de Sobrecarga e Mágicos.

Exemplo #3 Chamando um método pai

<?php
class MyClass
{
    protected function 
myFunc() {
        echo 
"MyClass::myFunc()\n";
    }
}

class 
OtherClass extends MyClass
{
    
// Sobrescreve e definição da classe estendida
    
public function myFunc()
    {
        
// Mas ainda consegue chamar o método na classe herdada
        
parent::myFunc();
        echo 
"OtherClass::myFunc()\n";
    }
}

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

Veja também outros exemplos de chamadas estáticas mais complexas.


Classes e Objetos
PHP Manual