Ahora estas en: Inicio > Blog » POO en PHP5 Parte 1: Clases y Objetos

POO en PHP5 Parte 1: Clases y Objetos 15 Noviembre 2009

Etiqueta de php Debido a mi interés en Magento, aplicación que se programo en php 5 orientada a objetos para desarrollar eCommerce, he decidido empezar una serie de artículos referentes a conceptos fundamentales de la Programación Orientada a Objetos en PHP 5, sí, uno más, pero los que he consultado en español en la web no han sido de mi entera satisfacción.

Magento-Zend AsociadosPara empezar aclaro que he elegido como marco de trabajo (framework) el de Zend para estandarizar los códigos de PHP en los ejemplos, primero porque es el que utiliza Magento y segundo porque uno de los libros que uso de referencia también lo utiliza.

Introducción

Sí bien la programación orientada a objetos (POO) fue originalmente reservada a los licenciados en ciencias de la computación, ahora está encontrando su camino cada vez más en el desarrollo web. ActionScript 3, el lenguaje detrás de Adobe Flash y Flex, es un lenguaje de programación completamente orientado a objetos y los muchos marcos de JavaScript, como jQuery, que recientemente se ha vuelto tan popular, aunque no al 100 por ciento-POO hace un amplio uso de los objetos.

No voy a reseñar una historia de POO o de la evolución de PHP para soportar POO porque mi intensión es adentrarme en los conceptos, pero en la wikipedia se puede encontrar por si hay algún lector interesado.

Relación entre Clases y Objetos

Objetos y clases se encuentran en el corazón de PHP 5 por lo que es importante su entendimiento. El bloque de construcción fundamental de todo código orientado a objetos se llama clase. Esto es simplemente una colección de variables y funciones relacionadas, todo envuelto en un par de llaves y de etiquetados con el nombre de la clase. En POO, una variable asociada a una clase se refiere a una propiedad, y una función se denomina método. La creación de una clase es muy similar a como se hace para la creación de una función en el lenguaje estructurado tradicional. Veremos la sintaxis real en él más adelante, pero la principal diferencia es que una clase agrupa todo junto.

Nota.- No todas las variables en una clase son propiedades. Una propiedad es un tipo especial de variable que puede ser utilizado en cualquier lugar dentro de una clase y, a veces fuera también. La distinción entre las variables comunes y las propiedades se aclara más adelante.

Así pues, si deseas validar la entrada del usuario, puedes crear una clase llamada Validador (por convenio, los nombres de las clases siempre comienzan con una letra mayúscula inicial) para agrupar a una serie de métodos (es decir, las funciones) y realizar pruebas como las siguientes:

Dado que otros desarrolladores pueden crear clases para propósitos similares, se recomienda que se añada un prefijo a los nombres de las clases y sea de tres o cuatro letras seguido de un guión bajo.

Acceder a la clase con el operador new para crear un Objeto

Cuando se desea utilizar cualquiera de las propiedades o métodos de la clase, es necesario crear una instancia de la clase usando la palabra clave new de esta manera:

$val = new Dwq_Validar();

Esto crea un objeto llamado $val. Como se puede notar, se ve como una variable de PHP ordinaria, entonces, ¿qué es un objeto? En este caso particular, es principalmente un dispositivo que le proporciona el acceso a todos los métodos definidos en la clase Dwq_Validar. Sin $val, no tiene manera de utilizarlos. Además de los métodos, una clase puede tener propiedades. En el caso de Dwq _Validar, una de ellas es almacenar un array de campos requeridos que el usuario ha fallado en rellenar; otra propiedad guarda una serie de mensajes de error. Debido a la forma en que la clase se ha diseñado, este array es rellenado automáticamente, conteniendo la información hasta que estés listo para utilizarla. En términos de programación, se podría pensar de un objeto como un array multidimensional sobrecargado que controla tanto las funciones, como también las variables. Sin embargo, desde un punto de vista conceptual, el objeto $val es la herramienta que valida la entrada al usuario. Utiliza los métodos para ejecutar pruebas específicas de validación, y guarda todos los resultados. En otras aplicaciones, los objetos pueden contemplarse de una manera similar a los objetos de la vida real. Una aplicación de comercio electrónico podría utilizar la clase Productos para representar artículos en existencias, o un foro en línea podría tener una clase Miembros, para representar a colaboradores individuales.

La Clase y Objetos en Acción

Echemos un breve vistazo al ejemplo de la clase Dwq_Validar en acción. Como se ha dicho antes, es necesario crear una instancia de la clase para poder usarla. Esto se conoce como una instancia de un objeto. Como habrás notado, cuando se instanció más arriba el objeto $val, he colocado un par de paréntesis vacíos después del nombre de la clase. De la misma manera como pasas argumentos a las funciones, también puedes pasar argumentos a un objeto en el momento de instanciar. La clase Dwq_Validar acepta dos argumentos, ambos opcionales. El argumento opcional primero es un array de entradas de formulario requerido. Así pues, el script para instanciar el objeto Dwq_Validar para validar, una forma simple puede ser como esta:

// Crear un array de campos de formulario requerido
$requeridos = array( 'edad', 'nombre', 'comentarios');
// Crear una instancia de un objeto validador, y pasarle el array $requeridos
$val = new Dwq_Validar($requeridos);

Acceder a las Propiedades y Métodos con el Operador ->

La manera de acceder a las propiedades y métodos de un objeto es con el operador -> (un guión seguido por un signo mayor que, sin espacio entre ellos). Incluso si no sabes nada sobre POO, no te debe tomar mucho tiempo deducir lo que el siguiente código hace (trata de adivinar, y luego lee el siguiente párrafo para ver si estaba en lo cierto):

// utiliza clase de métodos para validar campos individuales
$val->isInt('edad');
$val->removeTags('nombre', 0, 0, 1);
$val->checkTextLength('comentarios', 5, 500);
$val->removeTags('comentarios', 0, 0, 1);
$val->isEmail('email');
// validar la entrada y obtener cualquier mensaje de error
$filtered = $val->validateInput();
$missing = $val->getMissing();
$errors = $val->getErrors();

El objeto $val comienza comprobando si la edad es un número entero. A continuación, quita las etiquetas HTML en el campo del nombre, comprueba que el campo de comentarios contenga entre 5 y 500 caracteres, y quita todas las etiquetas de ella antes de comprobar que el campo de correo electrónico contenga un formato de dirección de correo electrónico correcto. Las tres últimas líneas validan la entrada, y obtienen los nombres de los campos faltantes y detalles de los errores. Puede parecer misterioso en el momento, pero es mucho más fácil de leer que decenas de líneas de instrucciones condicionales.

Otra ventaja es que los objetos son independientes unos de otros, incluso si son instancias de la misma clase. Puedes crear dos instancias independientes de la clase Dwq_Validar para validar la entrada del usuario tanto de los arrays $_POST y $_GET. Dado que los objetos están separados, se puede identificar de donde ha venido un mensaje de error y tomar las medidas adecuadas.

En resumen se puede decir que la relación más común entre Clase y Objeto encontrada en la mayoría de las fuentes es la de que una clase se puede ver como una plantilla de código utilizada para generar objetos y el objeto es un dato que ha sido estructurado de acuerdo a la plantilla definida en una clase.

Cada objeto se comporta como una caja negra, manteniendo los datos transmitidos a cada uno completamente separados del otro. La analogía de caja negra también se aplica a uno de los conceptos principales detrás de la POO: encapsulación. Concepto que será el tema del próximo artículo relacionado a POO en PHP5.

Referencias

Share

2 Respuestas a “POO en PHP5 Parte 1: Clases y Objetos”

  1. hola,para el autor de este tutorial esta muy bueno gracias por compartir tus ideas, pero estaria super si terminaras de explicar todo como hacer las validaciones del formulario con poo te lo agradeceria el doble, necesito terminar un proyecto de la escuela un sistema de reservacion de accesorios para fiestas online.felicidades tienes un 10

  2. Hola marijo,
    Una disculpa por no haber respondido antes, pero he estado con mucho trabajo. La verdad es que este artículo esta enfocado a los conceptos fundamentales de “Clases y Objetos” en POO y lo de la validación sólo lo comenté como ejemplo. Tendría que escribir un artículo enfocado unicamente para la validación del formulario y eso me llevaría algo de tiempo, especialmente por el uso de filtros en PHP5. Mucha suerte con tu proyecto y gracias por tus palabras.
    Saludos

Escribe tus comentarios

« »