Lo siguiente es válido únicamente para PHP 4 y versiones posteriores.
Algunas veces es útil referirse a funciones y variables en clases base o referirse a funciones en clases que no tienen aun alguna instancia. El operador :: es usado en tales casos.
<?php
class A {
function ejemplo() {
echo "Soy la función original A::ejemplo().<br />\n";
}
}
class B extends A {
function ejemplo() {
echo "Soy la función redefinida B::ejemplo().<br />\n";
A::ejemplo();
}
}
// no hay un objeto de la clase A.
// esto imprime
// Soy la función original A::ejemplo().<br />
A::ejemplo();
// crear un objeto de clase B.
$b = new B;
// esto imprime
// Soy la función redefinida B::ejemplo().<br />
// Soy la función original A::ejemplo().<br />
$b->ejemplo();
?>
El ejemplo anterior llama la función ejemplo() en la clase A, pero no hay un objeto de la clase A, así que no podemos escribir $a->ejemplo() o algo semejante. En su lugar llamamos ejemplo() como una 'función de clase', es decir, una función de la clase misma, no de un objeto de tal clase.
Existen funciones de clase, pero no existen variables de clase. De hecho, no hay un objeto en absoluto al momento de la llamada. Por lo tanto, una función de clase no puede usar variables del objeto (pero puede usar variables locales y globales), y quizás no pueda usar $this en absoluto.
En el ejemplo anterior, la clase B redefine la función ejemplo(). La definición original en la clase A es cubierta y ya no se encuentra disponible, a menos que haga referencia específicamente a la implementación de ejemplo() en la clase A usando el operador ::. Escriba A::ejemplo() para hacerlo (en realidad, debería usar parent::ejemplo(), como se muestra en la siguiente sección).
En este contexto, hay un objeto actual y puede tener variables de objeto. Por lo tanto, cuando se usa DESDE EL INTERIOR de una función de objeto, es posible usar $this y variables de objeto.