class
Una clase es una colección de variables y funciones que trabajan con
estas variables. Las variables son definidas con var
y las funciones con function. Una clase es definida
usando la siguiente sintaxis:
Esto define una clase llamada Carrito que consiste de una matriz
asociativa de artículos en el carrito y dos funciones para agregar y
eliminar elementos del carrito.
Warning
NO es posible separar la definición de una clase
en varios archivos. Asimismo NO es posible separar
la definición de una clase en bloques PHP diferentes, a menos que la
separación sea al interior de una declaración de método. Lo siguiente
no funciona:
Sin embargo, lo siguiente es permitido:
Las siguientes notas de precaución son válidas para PHP 4.
Caution
El nombre stdClass es usado internamente por Zend y
es reservado. No puede tener una clase con el nombre
stdClass en PHP.
Caution
Los nombres de función __sleep y
__wakeup son mágicos en las clases PHP. No puede
tener funciones con estos nombres en cualquiera de sus clases a menos
que desee usar la funcionalidad mágica asociada con ellas. Vea más
información a continuación.
Caution
PHP reserva todos los nombres de función que comienzan con __ como
mágicos. Se recomienda que no use nombres de función con __ en PHP a
menos que desee usar alguna funcionalidad mágica documentada.
En PHP 4, sólo se permiten inicializadores constantes para variables
var. Para inicializar variables con valores
no-constantes, necesita una función de inicialización que sea llamada
automáticamente cuando un objeto es construido a partir de la clase. Tal
función es llamada constructora (vea más información a continuación).
Las clases son tipos, es decir, son planos usados para variables reales.
Necesita crear una variable del tipo deseado con el operador
new.
Esto crea los objetos $carrito y
$otro_carrito, ambos de la clase Carrito. La función
agregar_item() del objeto $carrito es llamada para
agregar 1 item del artículo número 10 al $carrito. Se
agregan 3 items del artículo número 0815 al
$otro_carrito.
Ambos, $carrito y $otro_carrito,
tienen funciones agregar_item(), retirar_item() y una variable items.
Estas son variables y funciones diferentes. Puede pensar sobre los
objetos como algo similar a las directorios en un sistema de archivos.
En un sistema de archivos es posible tener dos archivos
LEAME.TXT diferentes, siempre y cuando estén en
directorios diferentes. Tal y como con los directorios, en donde es
necesario escribir las rutas de nombres completas para llegar a cada
archivo a partir del directorio del nivel superior, es necesario
especificar el nombre completo de la función que desea llamar: en
términos de PHP, el directorio de nivel superior sería el espacio de
nombres global, y el separador de ruta sería ->.
De tal modo que los nombres $carrito->items y
$otro_carrito->items hacen referencia a dos
variables diferentes. Note que la variable se llama
$carrito->items, no
$carrito->$items, es decir, un nombre de variable
en PHP solo tiene un único signo de dólar.
Al interior de una definición de clase, no se conoce el nombre bajo el
que el objeto será accesible en su programa: en el momento en que la
clase Carrito fue escrita, no se conocía si el objeto se llamaría
$carrito, $otro_carrito, o algo
diferente más adelante. Por lo tanto, no es posible escribir
$carrito->items al interior de la clase Carrito.
En su lugar, para poder acceder a sus propias funciones y variables
desde el interior de una clase, es posible usar la pseudo-variable
$this, la cual puede leerse como 'mi propio' o 'el
objeto actual'. Por lo tanto,
'$this->items[$num_art] +=
$num' puede leerse como 'agregar
$num al contador $num_art de mi
propia matriz de items', o 'agregar $num al contador
$num_art de la matriz de items al interior del objeto
actual'.
Note:
Usualmente, la pseudo-variable $this no es definida
si el método en el que se encuentra es llamado estáticamente. Sin
embargo, esta no es una regla estricta: $this se
define si un método es llamado estáticamente desde el interior de otro
objeto. En este caso, el valor de $this es aquél del
objeto que hace la llamada. Esto se ilustra en el siguiente ejemplo:
Note:
Existen algunas funciones interesantes que manejan clases y objetos.
Puede que quiera echar un vistazo a las Funciones de Clase/Objeto.