Una clase es una colección de variables y funciones que
trabajan con éstas variables. 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.
| Aviso |
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.
| Atención |
El nombre stdClass es usado internamente por
Zend y es reservado. No puede tener una clase con el nombre
stdClass en PHP.
|
| Atención |
Los nombres de función __sleep y
__wakeup son mágicos en las clases
PHP. No puede tener funciones con éstos 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.
|
| Atención |
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 que el objeto se llamaría
$carrito u $otro_carrito
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'.
Nota:
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:
Nota:
Existen algunas funciones interesantes que manejan clases y
objetos. Puede que quiera echar un vistazo a las Funciones de Clase/Objeto.