¿Qué esperar de PHP5?

Publicado en PHP Avanzado por Webstudio el abril 30th, 2003

Otros métodos nuevos

Hasta ahora vimos como PHP5 incorpora constructores unificados, destructores y el nuevo método __clone(), pero estas no son todas las sorpresas que el nuevo modelo de objetos nos tiene deparadas. Existen otros métodos, muy útiles a la hora de trabajar con objetos, que nos ayudarán en nuestra programación diaria y en adaptarnos más a los estándares de programación : __call() y la dupla __set()/__get().

Muchas veces me sucedió que por no leer bien la API de un objeto, terminaba llamando a métodos que en realidad no existían o que tenian un nombre diferente. Ante esto, el script producía un "Fatal Error - método Tal no está definido en el Objeto Juancito" y terminaba la ejecución. Bastante útil a la hora de "debuggear" nuestra aplicación, pero molesto si el error era generado en el servidor de producción (Si, sé que en un servidor de producción deben desactivarse todos los errores y utilizar otros métodos para generar errores, pero eso será tema de OTRO tutorial.).

Por suerte, la buena gente que programa PHP, incorporó el nuevo método __call(), que es automáticamente ejecutado en caso de ser llamado un método que no está definido en nuestra clase :

PHP:
  1. <?php
  2. class Objeto
  3. {
  4.         /*
  5.         * El prototipo es algo así :
  6.         * mixed __call(string $metodo, array $atributos);
  7.         */
  8.         function __call($metodo, $atributos)
  9.         {
  10.                 echo ("EL método \"$metodo\" fue llamado y no existe<br>");
  11.                 // Revisamos los parámetros
  12.                 var_dump($atributos);
  13.         }
  14. }
  15. $obj = new Objeto();
  16. $obj->probando(1, 2, "3");
  17. ?>

ÿtil, ¿no creen? Bueno, este método puede ser más útil de lo que parece. Y los que programan mucho OO, ya se deben estar imaginando porqué. Lo que hace muy interesante a este método es que permite simular la sobrecarga de métodos por tipo de operador, algo que no era posible anteriormente con PHP (si se podía simular la sobrecarga de métodos por cantidad de parámetros).

PHP:
  1. <?php
  2. class Objeto
  3. {
  4.         function __call($metodo, $atributos)
  5.         {
  6.                 if(is_integer($atributos[0])) $tipo = "entero";
  7.                 if(is_object($atributos[0])) $tipo = "objeto";
  8.                 $funcion = "$metodo_$tipo";
  9.                 $this->$funcion($atributos[0]);
  10.         }
  11.        
  12.         function sobrecarga_entero($entero)
  13.         {
  14.                 echo "El parámetro era un entero";
  15.                 echo "Entero : $entero<br />";
  16.         }
  17.        
  18.         function sobrecarga_objeto($objeto)
  19.         {
  20.                 echo "El parámetro era un objeto";
  21.                 var_dump($objeto);
  22.         }
  23. }
  24. $obj = new Objeto();
  25. $obj->sobrecarga(3);
  26. $obj->sobrecarga(new Objeto());
  27. ?>

Otra de las características más interesantes que ofrece PHP5, es la de poder utilizar los métodos __set() y __get(), que si se encuentran definidos en una clase, serán llamados siempre que se intente acceder o modificar los contenidos de algún miembro del objeto (salvo que ya nos encontremos dentro de alguno de los dos métodos, para evitar recursiones infinitas). Esto puede ser útil si queremos, por ejemplo, realizar un debug o un log de todos los valores que son asignados a un miembro en particular, o si queremos asegurarnos que a un miembro SOLO pueda asignársele valores de 1 tipo en particular.

PHP:
  1. <?php
  2. class Restringido
  3. {
  4.         var $a = array(); // Solo permitiremos que $a sea un array
  5.         var $error = ""; // Logearemos todos los contenidos de $error
  6.        
  7.         function __get($var)
  8.         {
  9.                 print "Devolviendo el valor de '$var'";
  10.                 return $this->$var;
  11.         }
  12.        
  13.         function __set($var, $valor)
  14.         {
  15.                 if($var=="a") // Esto sería más "lindo" con un Switch
  16.                         if(!is_array($valor))
  17.                         {
  18.                                 print "Solo podemos aceptar arreglos";
  19.                                 return;
  20.                         } else
  21.                                 $this->a = $valor;
  22.                 if($var=="error")
  23.                 {
  24.                         $this->error = $valor;
  25.                         // Suponemos que $this->log es un objeto
  26.                         // para Logear a un archivo
  27.                         $this->log->agregarLog(time(), $valor);
  28.                 }
  29.         }
  30. }
  31. $r = new Restringido();
  32. $r->a = "Hola";
  33. $r->a = array(1, 2, 3, 4, 5);
  34. $r->error = "Este es el mensaje de error";
  35. var_dump($r->a);
  36. ?>

Páginas: 1 2 3 4 5 6 7 8

24 comentarios

24 respuestas a '¿Qué esperar de PHP5?'

Suscríbete a los comentarios con RSS o realiza un TrackBack a '¿Qué esperar de PHP5?'.

  1. Gildus dijo,

    el enero 11th, 2006 a las 11:05 pm

    Holas y que hay en esta version 5 del PHP sobre las librerias del PHP-GTK para programacion GUI del PHP???

    Habra mas novedades con respecto a eso???
    o aun no habra un compilador para el PHP-GTK???

    Esperemos que halla mas soporte para esto, porque me parece super el PHP-GTK.

    Saludos
    Gildus

  2. epplestun dijo,

    el enero 21st, 2006 a las 9:45 pm

    Buenas Gildus, pues comentarte que PHP-GTK2 trabaja con PHP5.1.0 y aun esta en fase de dasarrollo, yo de momento lo utilizo para hacer pruebas y te puedo decir que funciona de maravilla :-)

  3. okoto dijo,

    el mayo 20th, 2006 a las 3:13 pm

    pues bien!
    parece que he encontrado un blog que leer!!!
    Esta chido!!!
    Un saludo y una felicitación!!!
    Un pregunta:

    Hay algo que deba saber acerca del módulo mail() en php 5?
    Es que recien migre de server y no funcionan mis formularios. (tenia php 4)

  4. german mazuera dijo,

    el agosto 16th, 2006 a las 12:50 pm

    Tengo fedora4 apache2 php5.
    Resulta que cuando envio correos a direcciones nombre@yahoo.com estos si llegan.
    Pero si envio a direcciones nombre@yahoo.com.ar o a nombre@telecom.com.co estos no llegan.
    Pregunto que me falta para que los correos lleguen a dominos:
    gov.co o com.co o com.ar?
    Gracias por ayudar

  5. Efren dijo,

    el octubre 12th, 2006 a las 7:53 am

    Hola, Quería saber algo más… ¿Es posible sobrecargar un constructor con pHP 5? Si es posible poner un ejemplo porfavor

  6. oscar dijo,

    el febrero 6th, 2007 a las 6:44 pm

    quisiera saber como manejo los blobs de mysql con una interfaz con php si me pedes ayudar con algunos tutoriales o paginas de visitas se lo agradecere

  7. chrishack dijo,

    el marzo 27th, 2007 a las 10:22 pm

    oye quiero un sistema de matricula en php
    el que lo tienes un favor que se lo pase y yo le dare programas para la elaboracion de webs

  8. Esteban dijo,

    el marzo 28th, 2007 a las 11:38 am

    Esa “sobrecarga de operadores” es el peor engendro que vi en mi vida. Por que en vez de hacer la funcion __call() no se ponen a hacer un sistema de sobrecarga como la gente?

  9. geidy dijo,

    el mayo 16th, 2007 a las 2:28 pm

    tengo un problema quisiera saber como se heredan formularios en php 5

  10. Jeski dijo,

    el junio 15th, 2007 a las 1:17 pm

    Que tal, alguién podría decirme si con PHP se puede generar un archivo WAR o EAR, para publicarlo como se hace en JAVA.

    Saludos
    Jesus


  11. el junio 26th, 2007 a las 8:19 pm

    hola megustaria que pusieran manuales sobre php5 o mas imformacion sobre las mejoras como ventas y desventajas que tiene.

    bueno saludos…


  12. el agosto 8th, 2007 a las 9:52 pm

    Hasta entonces, les deseo felices noches de programación extrema y grandes cantidades de cafeína para todos uds.

    Jajajajaja eso es cierto ya que la mejor hora que tengo es en la noche creo que no solamente a mi me pasa eso ….
    Pero bueno si alguien quiere aprender algo mas, debe de sacrificarse …..

    Salud2 ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡

  13. Solaris dijo,

    el septiembre 18th, 2007 a las 9:38 am

    Hola.
    aquí: http://www.recursos-webmaster.es/programacion-php4-php5.php teneis algo de info sobre php4 vs php5. El principal problema es que las empresas de hosting compartido no se atreven a dar el paso. Dar a elegir entre php4 o php5 supone dos mantenimientos distintos y una migración drástica de php4 a php5 sería un desastre.
    En http://www.configbox.com ofrecen hosting barato con php5 dan 10 días de prueba si se pide… y php6 que se acerca. estarán las 3 versiones a la vez? :D
    Un saludo y enhorabuena por la página.

  14. Dilod dijo,

    el septiembre 20th, 2007 a las 5:28 am

    Buenas
    Empiezo con el php5 tras muchos años con el php4, la verdad es que no hay muchos proveedores que lo ofrecen, supongo que porque la mayoria de los clientes aun no han hecho el cambio.
    Pues me he pillado un plan de prueba en http://www.configbox.com a ver que tal funciona, lo que me gustaria saber es la fiabilidad del php5, si alguien ha tenido problemas que no ha podido solucionar… lo bueno del php4 es que ya con los años, era bastante estable, pero es cierto que el php5 tiene pinta de ofrecer muchas mas ventajas.
    Por cierto, muy bueno el articulo, enhorabuena ;)
    Salu2

  15. Sarita dijo,

    el octubre 3rd, 2007 a las 7:03 pm

    aqui… donde estan las respuestas???? solo preguntas…

  16. Webstudio dijo,

    el octubre 3rd, 2007 a las 7:34 pm

    Probaste pasarte por el Foro?

  17. Anderson dijo,

    el diciembre 12th, 2007 a las 3:27 pm

    hola k tal espero k estes bien bueno kiero un sistema en php para ingrsar notas del primer semestre al promedio el sistema es para un colegio de primaria y secundaria acanbio yo te pasare todos mis programas para realizar una web musical o ya sea un sistema en java

  18. Fran Haro dijo,

    el enero 27th, 2008 a las 1:00 pm

    Hola a todos, muy bueno este sitio, sé muy poco de php, trabaje un poco con dreanwever, queria saber si hay un compilador de php5. Saludos

  19. manolo dijo,

    el abril 24th, 2008 a las 1:51 pm

    Hola a todos nesecito una ayudeta con lo de php5 OO manejado por multicapa gracias


  20. el julio 10th, 2008 a las 12:23 pm

    [...] un tiempo lei en este link, http://www.zonaphp.com/%C2%BFque-esperar-de-php5/6/, una especie de explicacion de como emular una [...]

  21. adrian dijo,

    el octubre 15th, 2008 a las 3:37 pm

    Oigan alguien podria ayudarme, lo que pasa es que estoy obteniendo unos datos de una base de datos Cache, algunos de estos datos no me los acepta al momento de convertirlo a XML, por ejemplo el símbolo & me marca error, me podria decir alguien como le puedo dar formato a este detalle

  22. Gerson Altamirano dijo,

    el abril 2nd, 2009 a las 3:56 am

    hola a todos, soy un webmaster en html, css, javascrip nada del otro mundo, y todo esto parece juguetes a la par de PHP. en mi labor me he visto con tareas de paginas que a la larga se ha hecho rutina hasta hoy: Bueno mi tarea de hoy es hacer una pagina que transmita video en vivo, he buscado mucho en la web (san google) y he visto que una buena idea es el streaming basado en subri pequeños videos actualisabes cada cierto tiempo, pero mi cliente quiere que sea netamente en vivo, bueno segui buscando y me encontre que la mejor opcion para transmitir en vivo era un programa basado en p2p, y se basa que entre mas usuarios hay conectados mas fluida es la transmision, por lo que mi duda surgio:
    PUEDO COLOCAR ESTE PROGRAMA (SOPCAST) EN MI PAGINA WEB UTILIZANDO PHP PARA TRANSMITIR EN VIVO, he leido que se podria utilizar exec() o system(), pero necesito una mejor definicion del uso de estas funciones

    att gracias

    PD mi cliente quiere algo como la pelicula UNTRACEABLE

  23. Zzombi dijo,

    el febrero 8th, 2011 a las 9:28 am

    hay un error.. en el primer ejemplo imprime

    “Pepsi la opción de la nueva Generación”

  24. joaquin dijo,

    el marzo 3rd, 2011 a las 2:01 pm

    hola, yo quiero plasmar informciòn de una variable a un campo de texto, còmo le hago?

    saludos

Deja un comentario