Definción y uso de clases en PHP
PHP no es un lenguaje explícitamente orientado a
objetos, si bien es cierto que está preparado para aprovechar una serie de aspectos
de las clases que son interesantes y recomendables en el desarrollo de aplicaciones.
En este artículo se verá cómo hacer uso de clases en PHP de una forma cómoda
y sin lugar a errores.
¿Qué es una clase?
La mayoría de lenguajes de programación modernos están orientados
a objetos. El concepto de orientación a objetos es una técnica que acerca la
programación a la forma de pensar humana. Podemos pensar en cualquier aspecto
de la vida real como un sistema basado en objetos: un coche, un bolígrafo, un
libro, una silla, o incluso una persona. Todos estos pueden ser objetos con
una serie de características y una serie de capacidades. Por ejemplo, un coche
tiene un número de puertas determinado, un color, un tamaño... y es capaz de
realizar tareas como arrancar, acelerar, frenar... Lo mismo sucede con una persona:
tiene una estatura, un peso, un color de ojos y muchísimas características que
la hacen única frente a las demás.
Siguiendo con el ejemplo, cuando uno va por la calle es capaz
de distinguir fácilmente a los seres humanos de otro tipo de elementos, como
los coches. ¿Por qué esto es así? Porque todos tenemos en la mente la idea de
un ser humano, su molde, las características que tiene que cumplir una entidad
para poder identificarse como un ser humano y no como un coche.
Este concepto que parece tan evidente es la base de la programación
orientada a objetos. En el ejemplo, la idea mental que tenemos de un ser humano
sería una clase, mientras que cada persona sería una representación física real
de esa idea de ser humano, en términos de programación cada persona sería una
instancia de esa clase.
En resumen, una clase es una idea de un objeto que tiene
sus carácterísticas, que a partir de ahora llamaremos propiedades, y sus habilidades,
su capacidad de realizar ciertas acciones, que en programación llamaremos métodos.
La clase coche, por ejemplo, podría tener como propiedades el color, las puertas,
el tamaño, la marca, el modelo, la velocidad máxima, y como métodos las acciones
de cambiar de marcha, acelerar, frenar, abrir el capó, bloquear las puertas.
Un ejemplo del uso de clases
Pensemos en una aplicación que gestione los datos de los
pacientes de una consulta médica, de forma que en cada visita el médico pueda
ver el historial del paciente. Una opción recomendable para desarrollar este
tipo de aplicación sería crear una clase llamada Paciente y dotarla de propiedades
como la edad, el sexo, el peso, la estatura, el número de identificación y las
observaciones. Podríamos ampliar la aplicación creando una clase llamada Visita
con propiedades como fecha, hora y causa, y otra clase, por ejemplo, llamada
Análisis que podríamos preparar para representar los resultados.
Todas estas clases podrían ir entrelazadas desde los métodos.
Por ejemplo, la clase Paciente podría tener un método llamado nueva_visita que
creara una nueva instancia de la clase Visita y esta a su vez podría tener un
método llamada nuevo_analisis, que se aplicaría cuando el médico diese la orden
a un paciente de hacerse un Análisis.
La programación orientada a objetos comporta una serie de
ventajas como la reutilización de código, la mejor comprensión, la flexibilidad,
la capacidad de hacer extensible una aplicación, la mejor división de las tareas...
En el ejemplo podríamos extender la aplicación símplemente creando nuevas propiedades
a la clase Paciente, podríamos dividir sin problemas el trabajo a realizar entre
varias personas, podríamos utiilzar código de otras aplicaciones...
Sintaxis de clases en PHP
La programación orientada a objetos, aparte de las clases,
se basa en más conceptos como la herencia, las interfaces, el polimorfismo...
algunos de los cuales todavía no se implementan en la versión actual de PHP.
La sintaxis básica de una clase en PHP es la siguiente.
<?php
class nombre_clase {
var $propiedad_1;
var $propiedad_2;
var $propiedad_3;
function método_1($parametro) {
instrucciones_del_método;
}
}
?>
Una vez definida la clase, que es el molde del objeto, se
pueden crear instancias a partir de ella. En PHP se hace de la siguiente forma.
<?php
$nombre_instancia = new nombre_clase($parametros);
?>
Una clase en cada archivo
En PHP no hay una forma establecida de organizar las clases.
Una buena forma de hacerlo es escribiendo cada clase en un archivo distinto,
de forma que a simple vista y sin tener que ver el contenido se pueda saber
dónde está cada una. Para poder hacer uso de esa clase, es decir, para poder
crear instancias de ella hay que hacer que su definición se incluya, esté presente,
en el archivo donde se cree su instancia.
<?php
include("clases/class_persona.php");
$luis=new Persona();
?>
Sin la instrucción del include, que sustituye esa instrucción
por el contenido de class_persona.php, no se podría crear una instancia de la
clase Persona, ya que la aplicación no encontraría su definición en ningún sitio.
La única restricción del lenguaje, bastante lógica, es que
no se puede definir una clase dos veces, error en el que se puede caer símplemente
haciendo más de una llamada o inclusión al archivo de la clase. De esta forma
no se puede hacer una llamada al archivo que contiene la definición de la clase
cada vez que se quiera usarla, porque corremos el riesgo de, si tenemos un árbol
de archivos algo complejo, hacer dos veces el include y generar un error.
Una posible solución es hacer uso de la función include_once
que previene este tipo de situaciones. Incluye el archivo pasado por parámetro
únicamente si antes no se ha incluido. Si por el contrario detecta que ya se
ha hecho una llamada no la vuelve a hacer. La sintaxis es la misma.
<?php
include_once("clases/class_persona.php");
?>
Inclusión automática
Partiendo del include_once se puede hilar más fino y en base
a ciertas capacidades de PHP generar un código que guardado en un archivo incluya
todas las clases de golpe y porrazo, haciendo que nos despreocupemos de los
includes. Se trata de programar un script en PHP que lea todos los archivos
de un directorio, y realice una acción con cada uno de ellos. En este caso la
acción a realizar es un include_once.
De esa forma, automáticamente, sólo colocando la clase en
el directorio de clases se puede incluir en un mismo archivo junto con todas
las demás.
<?php
$dir=opendir("./class");
while ($archivo=readdir($dir))
if ($archivo!="." && $archivo!=".." &&
$archivo!="clases.php")
include_once($archivo);
closedir($dir);
?>
Paso a paso, este código abre el directorio situado en la
ruta ./class, lee el listado de archivos que hay dentro, y hace un include_once
a cada archivo que se encuentra, exceptuando clases.php, que es en el que se
colocan estas líneas. Con esto se consigue que en cada página de la aplicación
sólo tengamos que hacer un include al archivo clases.php para que se pueda usar
cualquier clase definida en el directorio.
<?php
include("class/clases.php");
?>
Herencia
La herencia es un concepto de la programación orientada a
objetos, con el que una clase puede heredar todas las propiedades y los métodos
de otra y además añadir los suyos propios. Por ejemplo, tanto la clase Gato
y la clase Tigre podrían heredar el contenido de la clase Mamífero y además
tener características propias.
PHP también está preparado para trabajar con la herencia
de clases. El problema surge al usar el sistema automático para incluirlas.
Una clase no puede heredar las características de otra, si no existe una definición
previa de esa misma, como es lógico. Por tanto, es probable que el código anterior
reporte un error de ese tipo.
La solución está de nuevo en el include_once. Básicamente
se trata de asegurarnos de que cuando una clase vaya a recibir la herencia de
otra, esa segunda clase ya se haya incluído en el archivo. Esto se consigue
haciendo la llamada a la clase padre desde el archivo de la clase hijo que va
a heredar las características.
<?php
include_once("class_padre.php");
class hijo extends padre {
var $propiedad_1;
var $propiedad_2;
function método_1($parametro) {
instruccion_del_método;
}
}
?>
Artículo escrito por: Joaquín Martí
García
|