domingo, 15 de abril de 2012

Ejemplo sencillo de Programacion Orientada a Objetos con PHP

Buenas tardes.

Como les habia prometido en el post anterior, vamos a iniciar el desarrollo de aplicaciones usando la POO.
No voy a detenerme a explicar que es una clase, herencia y demas conceptos que corresponden a este modelo de programacion, por que en la web abunda suficiente informacion con lo cual ustedes pueden reforzar sus conocimientos.

Vamos a utilizar el ejercicio anterior de consulta a la tabla de estudiantes, pero de aqui en adelante vamos a meterle mas funcionalidad, realizaremos un CRUD (Create, read, Update y Delete), veremos algo de html basico, incluiremos javascript para realizar validaciones, y mas adelante incluiremos algo de AJAX.

Espero que les guste.

Si recuerdan el ejercicio anterior realizabamos una consulta a nuestra tabla de estudiantes, realizamos nuestra conexion, la consulta, todo dentro del mismo archivo index.php, bueno en esta ocasion nuestra conexion vamos a crearla en un archivo aparte de la siguiente manera:

en nuestra carpeta de proyectos creamos una carpeta que la vamos a llamar clases y dentro de clases guardamos nuestro archivo de conexion llamado conectar.php


Asi va a quedar nuestra primera clase:

 

como podemos observar iniciamos con la palabra reservada class donde indicamos que es una clase y le colocamos un nombre, yo le coloque Conectar pero ustedes pueden llamarla como ustedes deseen.

luego creamos nuestro objeto de conexion. Los objetos en PHP se crean como funciones publicas para que puedan ser llamadas desde otros archivos.

si vemos en la linea public static function conexion() se encuentra la palabra reservada static es decir es una funcion estatica por que no vamos a tener necesidad de crear una instancia de ese objeto si no que la podremos llamar directamente desde cualquier pagina donde hallamos agregado nuestra clase, mas adelante les mostraré como hacerlo para que quede mucho mas claro.

el resto de la funcion lo habiamos visto en la entrada anterior, y por ultimo retornamos la variable $con, hasta aqui llega nuestra clase Conectar.

Ahora vamos a crear nuestra segunda clase, creamos el archivo estudiantes.php y dentro de este vamos a colocar esto:


 
Aqui vamos a ver unas cosas interesantes.

lo primero que hacemos es agregar nuestra clase conectar creada anteriormente por que necesitamos conectarnos a nuestra base de datos, utilizamos el require_once para agregarlo y dentro colocamos la ruta donde se encuentra ubicado.

luego creamos la clase estudiantes, y dentro declaramos una variable $est de tipo privada, es decir, que solo se puede acceder  a ella desde nuestra clase estudiantes.

luego creamos nuestro constructor que es donde vamos a declarar nuestra variable de tipo array para guardar en esta los resultados de nuestra consulta a la base de datos


algo que es muy importante es el uso de la sintaxis ->, esto lo que quiere decir es que estamos accediendo a un objeto o atributo de nuestra clase y el $this es por que lo estamos accediendo desde ella misma, en este caso estamos accediendo a nuestra variable privada $est y a la cual la vamos a crear de tipo array()

y luego creamos nuestro objeto el cual nos traera todos los estudiantes que tenemos creado en nuestra tabla estudiantes y que llamaremos get_estudiantes

 

en una variable llamada $sql creamos nuestra consulta superdificilisima para traer todos los estudiantes creados, luego ejecutamos nuestra consulta

 

Se acuerdan que cuando creamos nuestra clase Conectar habiamos declarado al objeto conexion como estatico, bueno, como ya agregamos arriba la clase Conectar solamente colocamos el nombre de la clase seguido de :: y por ultimo el objeto conexion(), y no tuvimos necesidad de instanciar la clase. Interesante verdad.

Luego recorremos con un while todos los registros que nos trajo la consulta asi:

 

usamos mysql_fetch_assoc por que vamos a guardar cada registro como un array, es decir, cada registro va a tener un indice y el nombre del campo de esta forma: nombre_var[indice]["nombre campo"] cuando vallamos a nuestro ultimo archivo lo vamos a tener mas claro.

y por ultimo retornamos el resultado.

Nuestro ultimo archivo lo vamos a colocar fuera de la carpeta clases y lo llamamos index.php



Este archivo contiene HTML normal con sus etiquetas head, body. En la parte superior dentro de este codigo HTML agregamos un bloque PHP asi:

 

agregamos nuestra clase estudiantes, y aqui vemos algo nuevo, como instanciar nuestras clases y hacer uso de sus objetos, para instanciar una clase utilizamos la palabra new seguida de la clase y se la asignamos a una variable.

 

luego con esa variable que llamamos $est hacemos uso del objeto get_estudiantes por medio de -> y se la asignamos a otra variable.



$datos en estos momentos es un array que contiene todos los registros de nuestra consulta, asi que por ultimo lo que hacemos es recorrer ese array y lo hacemos de esta forma.


aqui estamos integrando codigo html y php juntos, solo es abrir y cerrar los bloques php donde lo necesitemos. hemos agregado 3 input de tipo texto para la identificacion, nombre y telefono de nuestros estudiantes.

como la variable $datos es un array y este tiene un indice vamos a recorrerlo mediante un for asi

 

lo iniciamos en $i=0 , luego lo recorremos hasta que sea menor a lo que contiene nuestro array y usamos la funcion sizeof y por ultmo incrementaremos nuestro indice de a uno.

luego en nuestros input en el atributo value vamos a abrir un bloque php para mostrar nuestros resultados dentro de este y o hacemos de esta forma


colocamos $datos mas el indice y el nombre que tiene nuestro campo en la tabla estudiantes.

y el resultado es el siguiente:


Interesante verdad.

Bueno hasta aqui esta entrada espero que les halla gustado, dejen sus comentarios y opiniones.

Hasta una nueva entrada.
4.90/5 – 125

34 comentarios:

  1. el ejercicio no da, sale error en el mysql_fetch_assoc.

    me podrías dar una solución.

    ResponderEliminar
    Respuestas
    1. while ($reg= mysql_fetch_assoc($res)){
      $this->est[]=$reg;
      }

      Eliminar
    2. Ami si me salio hasta aqui chequen bien su sintaxis yo estoy batallando mas adelante .en la parte 2

      Eliminar
  2. si da, es un ejemplos fácil de implementar, cuando el mysql_fetch_assoc falla muchas veces es porque la consulta esta mal.

    ResponderEliminar
  3. Buen ejemplo compadre saludos desde Colombia

    ResponderEliminar
  4. Por que me saldra este error?


    Notice: Undefined index: in C:\wamp\www\clase_consul\index.php on line 20 Call Stack #TimeMemoryFunctionLocation 10.0013250656{main}( )..\index.php:0 " />

    ResponderEliminar
  5. excelente ejercicio! MUCHAS GRACIAS! has mas por favor.

    ResponderEliminar
  6. muy claro el ejemplo muchas gracias por compartir

    ResponderEliminar
  7. Buen ejemplo men. aunque tengo una pregunta tal vez un poco novato. y. si quiero imprimir sólo el primer campo?

    ResponderEliminar
    Respuestas
    1. lo que podes hacer es modificar la consulta sql, en el campo WHERE agregas ROWID = (SELECT MIN(ROWID) FROM NOMBRE_TABLA); o si queres mantener la sentencia en el bucle FOR modificas for($i=0;$i<=1;$i++) de esa manera no es la mas 'ortodoxa' es como harcodear o forzar algo. Saludoss

      Eliminar
  8. Si quiere imprimir solo el primer campo entonces no no use el bucle for, al manderle y y solo una impresion te imprimira unicamente el pimer estudiante que encuentre o sea $est[0] , y como estan guardado en datos pues solo es poner $datos[0]

    ResponderEliminar
  9. Me encanta tu forma de explicar!!! muchas gracias.

    ResponderEliminar
  10. Es verdad! Excelente explicación... entendii de una sola leída! Buen aporte gracias

    ResponderEliminar
  11. Hola. ¿donde cierras la conexión? o ¿donde iría el cerrar la conexión? saludos.

    ResponderEliminar
  12. Muchas gracias por compartir sus conocimientos, esta muy bueno el aporte, mil y mil Gracias

    ResponderEliminar
    Respuestas
    1. A ti por dejar tus comentarios, tratare de seguir alimentando el blog

      Eliminar
  13. Gracias por tan buen ejemplo.

    AnzOne

    ResponderEliminar
  14. Respuestas
    1. Gracias Jhon, tratare de seguir alimentando el blog con mas ejemplos practicos

      Eliminar
  15. Gracias por tu tiempo, quiero aprender y me gustaria saber cual es la utilidad de este ejemplo en usar clases, pues no hay diferencia en llamar a una funcion "get_estudiantes" y ya. Podrían explicarme porfavor.
    Gracias.

    ResponderEliminar
    Respuestas
    1. Hola, la POO es un paradigma de programación que te permite diseñar tus aplicaciones de una forma mas ordenada que la programación tipica, ademas de poder crear una clase y poderla usar solo llamándola en cualquiera de tus paginas sin necesidad de reescribir codigo. los nombres de las clases las defines tu mismo como mejor te parezcan. gracias por tomarte el tiempo de comentar tratare de montar mas material para tu aprendizaje

      Eliminar
  16. yo tengo una duda, veo 2 bucles, uno dentro de otro. Uno es el que está en el método de la clase. El otro es el que está en el visor (el HTML). Pero no veo porqué funciona y no muestra varias veces cada registro ¿?.
    Gracias de antemano,
    Angel.

    ResponderEliminar
    Respuestas
    1. Angel Buenos días.

      Que consulta estas utilizando? cuantos registros trae tu consulta?

      Eliminar
  17. pero,no se supone que la clase estudiante deberia tener como atributos todos los datos del estudiante por separado (orientación a objetos), y lo que haces es solo definir un atributo y retornar todos los atributos del estudiante en un arreglo.

    ResponderEliminar
    Respuestas
    1. Exactamente, muy buena tu pregunta, yo tambien tengo es duda.

      Eliminar
  18. Amigo si puedes hacer el ejemplo con los daros orientado a objeto me ayudarias mucho.

    Quiero imprimir todas los registros de un objeto (yo los registro con un set y los imprimo con un get para cada uno), no se como imprimirlos todos.

    Estas son las funciones que uso para imprimir y registrar datos
    public function getNombre(){
    return $this->nombre;
    }
    public function setNombre($_nombre=''){
    $this->nombre=$_nombre;
    }

    ResponderEliminar
  19. Amigo deberías permitir que el código se copie. Se pierde mucho tiempo transcribiendo el ejemplo.

    ResponderEliminar
    Respuestas
    1. Buenos días.
      Pues la idea es que la persona no solo copie y pegue por que si, por experiencia se que al escribir directamente el código el desarrollador palpa lo que es el lenguaje en el que programa y retiene en su memoria un porcentaje de lo que esta realizando.
      Pero en las próximas entradas tratare de subir los archivos que se vayan desarrollando.

      Gracias por tus comentarios.

      Eliminar
  20. saludos..buen inicio..espero aprender mucho sobre orientacion a objeto en php..poco a poco pero ahi vamos jejejej

    ResponderEliminar