PHP: ejemplo de página web con orientación a objetos (parte 1)

Vídeo: PHP: ejemplo de página web con orientación a objetos (parte 1)

Descarga de ficheros del ejemplo: iDESWEB: PHP: ejemplo de página web con orientación a objetos

[kml_flashembed movie=”http://www.youtube.com/v/ZIdQstGwoxQ” width=”560″ height=”315″ wmode=”transparent” /]

Transcripción:

Hola, soy Sergio Luján Mora, profesor de informática de la Universidad de Alicante, y en este vídeo que forma parte del curso “Introducción al desarrollo web”, te voy a mostrar un ejemplo de desarrollo de una página web con orientación a objetos.

Si no conoces la sintaxis de la orientación a objetos en PHP, te invito a que veas los vídeos “PHP: orientación a objetos (PHP4)”, y “PHP: orientación a objetos (PHP5)”. En estos dos vídeos te explico lo mínimo que necesitas conocer sobre la orientación a objetos en PHP.

El siguiente ejemplo que te voy a mostrar lo voy a realizar con la sintaxis de orientación a objetos de PHP5.

En esta primera parte del vídeo voy a desarrollar el ejemplo con el estilo procedural. En el estilo procedural el código se encuentra en procedimientos o funciones.

Para almacenar los datos del programa que voy a realizar voy a utilizar arrays.

En el siguiente vídeo, transformaré este ejemplo en orientado a objetos y los arrays los sustituiré por clases y objetos.

¿Cuál de los dos estilos es el mejor, el procedural o el orientado a objetos?

Desde hace años, el estilo de programación que se aconseja es el orientado a objetos. Es el mejor para grandes proyectos en los que trabajan muchas personas al mismo tiempo. Pero esto no significa que el estilo procedural ya no se deba usar. En este ejemplo vamos a ver algunos de los problemas del estilo procedural, pero en ciertas situaciones es una muy buena opción.

Pasemos a ver el ejemplo.

Aquí tenemos el ejemplo que te voy a mostrar. El código ya lo tengo escrito para ir más rápido y también para no cometer errores durante la grabación del video.

Fíjate que no voy a construir una página web real, es decir, no voy a preocupar por ponerle el DOCTYPE, el <html>, etcétera, ya que el objetivo del vídeo no es hacer una página web real sino trabajar con PHP con las clases, con los objetos, etcétera.

He puesto aquí esta etiqueta <pre> para activar la visualización de texto preformateado. Esto me va a permitir que los saltos de línea que yo escriba, muestre desde PHP se respete.

En PHP primero he declarado una función llamada “e” que va a ser un alias de la función eco de PHP. Es la función que voy a emplear para mostrar, para visualizar algo en la página. Esta función añade a lo que yo quiero mostrar, a la cadena, le añade un salto de línea.

A continuación tengo declarado el array $comunidad. Este array es multidimensional, tiene en concreto dos dimensiones. En la primera dimensión vamos a encontrar una serie de arrays. Cada array representa un miembro de la comunidad universitaria.

Tenemos dos tipos de miembros: el tipo profesor y el tipo estudiante. Los dos tipos comparten alguna información, los dos tienen nombres y apellidos, como podemos ver aquí. Sin embargo, el tipo profesor tiene un campo propio, el cargo que ocupa el profesor y el tipo estudiante tiene un campo propio, el curso en el que estudia el estudiante.

Tenemos aquí cinco miembros de la comunidad universitaria. Fíjate que he empleado arrays asociativos, esta posición, este índice en el array no es un número sino que es una cadena. Lo primero que voy a hacer es visualizar este array en la página web para ver si se muestra como yo espero. Así que me voy a la página web y aquí lo tenemos, tal como se muestra.

Fíjate algo muy importante, la página que estoy haciendo la estoy ejecutando a través de localhost, no la puedo ejecutar directamente porque tiene código PHP. El array, como puedes ver, tiene cinco posiciones que van de la posición cero a la posición cuatro.

Lo siguiente que voy a hacer, voy a quitar este comentario, lo siguiente que voy a hacer es mostrar el array con un formato que yo quiero. Para ello voy a recorrer el array, el array $comunidad con un bucle foreach. Y entonces aquí nos encontramos el primer problema del estilo procedural. Tenemos dos tipos de miembros, el tipo profesor y el tipo estudiante. Cada uno tiene información diferente, así que vamos a necesitar dos funciones para mostrar cada uno de ellos. Si tuviésemos diferentes tipos, tres, cuatro, cinco, seis, necesitaríamos tres, cuatro, cinco, seis funciones para cada uno de los tipos.

Aquí tengo la primera función para mostrar el tipo profesor, la he llamado ProfesorToString(), es decir, me va a convertir un array de este tipo me lo va a convertir en una cadena, es lo que va a devolver esta función. $p va a ser el array de tipo profesor que va a recibir la función y se tienen que hacer algunas comprobaciones para hacer el código “a prueba de bombas”, para que no surjan problemas. Así que lo primero que voy a comprobar es si el array que me pasan es realmente un array; si la variable, el parámetro que han pasado $p es realmente un array.

Si es un array, lo siguiente que compruebo es que exista una posición llamada tipo, y si existe esa posición, lo siguiente que compruebo es que sea de tipo profesor, porque esta función es para mostrar un profesor. Y si es así entonces ya viene el código concreto para mostrar un profesor. Primero compruebo si tiene nombre y apellidos, si no tiene nombre y apellidos entonces el resultado, lo que voy a mostrar, es desconocido, no sabemos su nombre y sus apellidos y a continuación el cargo. Si no es así, si el nombre y los apellidos es distinto de cadena vacía, entonces el resultado es el nombre, coma apellidos, coma cargo.

Esto mismo lo tengo que repetir con el tipo estudiante. EstudianteToString recibe $e, recibe este parámetro y otra vez volvemos a realizar las mismas comprobaciones. Primero compruebo que sea un array, luego compruebo que esté definida la posición tipo, luego compruebo que sea de tipo estudiante y finalmente, si es así, ya muestro, en realidad ya devuelvo una cadena con el resultado y otra vez, si no hay nombres y apellidos, devuelvo desconocido y si sí que hay, pues devuelvo nombre, apellidos y el curso del estudiante que es lo que va a devolver la función EstudianteToString.

Bien, esto ya lo podemos probar, voy a poner ahora aquí un comentario, esto lo veremos después, así que ahora se va a ejecutar este código, va a recorrer el array y para cada miembro vamos a ver si tenemos que llamar a ProfesorToString si es de tipo profesor o a EstudianteToString si es de tipo estudiante.

Como he dicho antes, si tuviésemos más tipos, lo tendría que ir añadiendo aquí uno tras uno.

Bien, grabo el fichero y ejecuto la página. Me sale el array con el print_r() que ya lo teníamos antes, y aquí ya me sale la visualización en mi formato. Aquí tenemos un profesor, aquí tenemos un estudiante, otro estudiante, aquí tenemos un profesor y por último aquí tenemos este estudiante del cual no sabemos ni su nombre y apellidos ni su curso.

Bien, ahora ya empiezan los problemas. ¿Qué ocurre si en mi código pues por error, por ejemplo, realizo este bucle?

Con este bucle voy a cambiar todos los miembros de la comunidad universitaria y les voy a poner tipo estudiante. Pero quizás eso no se debería de poder hacer, quizás se debería comprobar que por ejemplo este miembro, que es de profesor, no puede cambiar de tipo.

Esto, en la programación procedural con arrays, es imposible, esto no se puede controlar, no se puede impedir que se hagan cosas como ésta. Y tampoco se puede impedir que se haga esto, por ejemplo le podemos poner que el curso de los estudiantes es quinto, cuando en realidad a lo mejor no es posible, no existe, el curso solamente existe de uno a cuatro, de primero a cuarto.

Como he dicho antes, todo esto no lo podemos impedir en la programación procedural, pero luego ya veremos que en la programación orientada a objetos si que lo podemos controlar.

Bien, vamos a probarlo y ahora veremos, bien primero tenemos que mostrarlo, voy a quitar este comentario, ahora explicaré esto para qué está, y vamos a probarlo.

Y ahora vemos como todos nuestros miembros, todo el contenido de nuestro array ha cambiado a tipo estudiante y a todos le ha puesto el curso quinto.

Y si ahora lo visualizamos pues efectivamente nos lo saca como que todos son estudiantes.

Bien, para finalizar este vídeo, te he dicho que te iba a comentar esto para qué estaba puesto. Bueno, no te lo digo, te lo dejo como ejercicio que averigües por qué está puesto esto aquí y qué ocurre si no lo ponemos, qué ocurre si yo esta línea la quito.

Como pista, fíjate que aquí le había puesto un ampersand en el bucle foreach. Este ampersand hace que miembro sea una referencia a las posiciones del array. Este ampersand está relacionado con esto y como digo, si no se pone, aquí ocurre algo curioso.

Ya para finalizar, me gustaría recordarte algunos de los sitios web en los que puedes encontrar más información sobre mí y sobre mi trabajo, y dos formas de contactar conmigo, a través de mi correo electrónico sergio.lujan@ua.es y a través de mi cuenta en Twitter @sergiolujanmora.

Recuerda que este vídeo forma parte del curso “Introducción al desarrollo web” que está disponible en la dirección idesweb.es.

Muchas gracias por tu atención.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *