Programación Orientada a Objetos en PHP

Publicado en Prog. Orientada a Objetos por Webstudio el febrero 24th, 2003

Objetos de la clase "Otra" ahora poseen todos los atributos y métodos de la clase padre (Algo) más sus propios métodos y atributos. Se puede hacer:

PHP:
  1. $obj2=new Otra;
  2. $obj2->setX(6);
  3. $obj2->setY(7);

La Herencia múltiple no está soportada por PHP así que no se puede hacer que una clase extienda dos o más clases diferentes.

Se puede sobreescribir un método en la clase derivada tan solo redefiniéndolo, si redefiniéramos getx en "Otra" ya no podríamos acceder al metodo getx en "Algo". Si se declara un atributo en una clase derivada con el mismo nombre de un atributo de la clase base, el atributo derivado "esconde" al atributo de la clase base cuando se intenta acceder al mismo.

Se puedden definir Constructores en las clases. Los Constructores son métodos con el mismo nombre de la clase y que son llamados en el momento en que se instancia un objeto, por ejemplo:

PHP:
  1. <?php
  2. class Algo
  3. {
  4.         var $x;
  5.        
  6.         function Algo($y)
  7.         {
  8.                 $this->x=$y;
  9.         }
  10.        
  11.         function setX($v)
  12.         {
  13.                 $this->x=$v;         
  14.         }
  15.        
  16.         function getX()
  17.         {
  18.                 return $this->x;
  19.         }
  20. }
  21. ?>

Asi que ahora se puede crear al objeto asi :

$obj=new Algo(6);

Y el Constructor automáticamente asigna 6 al atributo x. Los Constructores y los métodos son funciones normales de PHP, por lo que se pueden usar argumentos por defecto.

function Algo($x="3",$y="5")

Entonces:

PHP:
  1. <?php
  2. $obj=new Algo(); // x=3 e y=5
  3. $obj=new Algo(8); // x=8 e y=5
  4. $obj=new Algo(8,9); // x=8 e y=9
  5. ?>

Los argumentos por defecto son utilizandos de la misma manera que en C++, asi que no es posible pasarle un valor a Y dejando que X tome el valor por defecto, los argumentos son asignados de izquierda a derecha y cuando no se encuentran más argumentos, y si la función esperaba más de los que se enviaron, entonces los restantes toman sus valores por defecto.

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

57 comentarios

57 respuestas a 'Programación Orientada a Objetos en PHP'

Suscríbete a los comentarios con RSS o realiza un TrackBack a 'Programación Orientada a Objetos en PHP'.

  1. Jorge dijo,

    el diciembre 31st, 2005 a las 2:14 pm

    Me parece muy bueno, pero te cuento lo que me paso, yo se mucho de php, pero nada de OOP si bien estoy leyendo mucho del tema, de este tutorial solo entendí menos del 50% y creo que es debido a la falta de ejemplos. No es una critica maligna solo lo que me parecio, por ejemplo en el tutorial de paginas modulares me parece que se entiende muchisimo mas, saludos!

  2. Webstudio dijo,

    el diciembre 31st, 2005 a las 6:23 pm

    Pues te diré, yo entendí o terminé de entender ciertas cosas de este artículo, la noche anterior a pasar los contenidos y republicarlo. Sucede que quizás este apuntando demasiado alto, lo cual siendo proveniente de Luis Argerich no me sorprenda tanto. Lo que veré de hacer es publicar algunas re-versiones de este artículo en el futuro, bajando un poco el nivel o haciéndolo un poco más didáctico, sin caer en el viejo y trillado ejemplo de “Este es un auto, y tiene un método acelerar()”, porque eso poco y nada tiene que ver con la real programación orientada a objetos.

    Saludos y gracias por todos sus comentarios. ME sirevn mucho para enterarme lo que necesitan y como puedo agregar más contenidos.

  3. Fenix_Xanadu dijo,

    el enero 2nd, 2006 a las 12:22 pm

    El articulo esta muy bien, y para los que no le entendieron les recomiendo leer mas a fondo lo que es la programacion orientada a objetos.

  4. itu dijo,

    el enero 16th, 2006 a las 12:34 pm

    Bueno, el articulo esta bien, gracias a el he entendido bastantes cosas, aunque hay que tener en cuenta que habla sobre PHP4. En PHP5 se gana en POO, se pueden hacer la mayoria de cosas que en este manual se dice que no como: la posibilidad de poner atributos como protegidos, privados o publicos, crear clases abstractas y mas cosas.

    Nota: SI me equivoco corregirme


  5. el enero 17th, 2006 a las 6:40 pm

    La POO (Programacion Orientada a Objetos) es un topico complejo que se incia estudiando lo que es UML y programando en C++ que es una obligacion para todos los programadores para sentar las bases. Lastimosamente el autor del tutorial ha omitido partes esenciales en la explicacion, suponiendo que su auditorio esta al tanto de la POO. Honestamente la explicacion fue notoria, lo que me queda decir que las personas que estan en esta curva de aprendizaje, deben estudiar mucho mas las bases de la POO.

    Saludos y animos a todos.

  6. Webstudio dijo,

    el enero 17th, 2006 a las 9:24 pm

    Lamento contradecirte, Carlos Xavier, en que para aprender POO no es necesario obligatoriamente nada. El C++ ofrece una versión parcializada de lo que se puede lograr con clases y yo diría que incluso Java no es un ambiente PURO orientado a objetos. Conoces Smalltalk? bueno, recién allí creo que tienes lo que yo consideraría escencial, aunque no obligatorio, no eso nunca.

    Para aprender a POO si es “recomendable” conocer algo de UML, aunque lo básico es tan solo dejar de pensar en manera estructurada. Hacer un cambio en el pensamiento lineal de un problema, o de una librería de funciones, y comenzar a pensar más en las relaciones y en los mensajes. Después, si logras esto, con el tipo de dibujito que representes tus clases o el lenguaje en el que programes tus clases, es lo de menos.

    Vamos, que aquí la idea es compartir y aprender con lo que cada uno sabe, y no venir a mostrar “la verdad”, que sabemos que nadie la tiene.

    Saludos.

  7. Comentarista dijo,

    el febrero 12th, 2006 a las 5:25 pm

    Bueno, solo queria decir que yo se programar mas o menos en php, este manual me parece muy interesante, pero puede resultar un poco dificil de entender, creo que lo completaria bastante un ejemplo real de utilizacion para entenderlo mejor.

    Salud.


  8. el febrero 18th, 2006 a las 11:17 pm

    Miren, estoy en búsqueda de un servidor php disponible que me pueda enviar un formulario por e-mail, espero su respuesta

  9. lokoloko dijo,

    el febrero 19th, 2006 a las 4:31 pm

    el curso es muy básico, donde puedo conseguir mas información?

  10. murcielago dijo,

    el marzo 28th, 2006 a las 10:51 pm

    me parece que le falta unos ejemplos y un poco mas de algoexpicito o entendible pór que la verdad se hace uno bolas con lo que aqui dice

  11. cmpumarejo dijo,

    el marzo 30th, 2006 a las 6:01 pm

    Un poco basico pero la verdad cubre bastantes temas de la POO de una manera rapida, en mi opinion el manual trata de introducir sobre la POO usando PHP -y lo logra-, no es un curso de POO para eso hay cantidad de informacion en la red, no esperen que un solo documento les de todas las herramientas.

    Lo que si me gustaria es la revisiòn del mismo teniendo la en cuenta los cambios introducidos con PHP5.

    Saludos a todos

  12. franchesca dijo,

    el abril 27th, 2006 a las 3:54 pm

    que sea mas esplicable con terminos que se manejan en la actualidad no con palabras de su propio lenguaje de programacion .

  13. Lissette dijo,

    el abril 28th, 2006 a las 12:11 pm

    Bueno personalmente para mi POO es una manera de pensar completamente diferente a la estructurada, tu puedes programar muy bien en java (q es POO completo), como en php OO, xq lo q se rige en la POO es pensar en Objetos es pensar en atributos y funciones, y bueno complementarle la herencia, poliformismo y todas esas cosas de la teoria q en la practica sinceramente .. son BIEN PRACTICAS… mas q un manual de php en Objetos (si quieres entenderlo bien y APLICARLO BIEN!!!) creo un manual de la logica de la POO (atributos, funciones y defincion de un objeto) ayudaria bastante a q los q van a trabajar de esta manera puedan utilizar la programacion de manera provechoza, xq es facil aprender a programar en POO , pero saber aplicarla para q te ayude a tu Programacion sea de mas Calidad, utilziar menos recursos, etc etc etc… de ventajas q te da el POO , creo q es basico un manual de los q es POO , ayudaria bastante a enteder muchas cosas.. de ahi sale la cosecuencia del UML, java, php en OO y etc. de herramientas para la implementacion de un sistema q es OO, buneo esa es mi forma de pensar, puesto con OO llevo trabajando mas de 6 año y POO en php tengo 2 semanas y trabajo mas rapido de lo q trabajaba estrucuradamente en php, mi comentario (UN POCO LARGO NO!! jeje)

  14. Pedro Frias dijo,

    el mayo 8th, 2006 a las 10:19 pm

    Gracias por el artículo, que en realidad es un excelente tutorial, que nos enseña de manera clara y directa, una forma para acometer el cambio que necesitamos los que tenemos muchos años con programación estructurada para adaptarnos al nuvo paradigma de programación, lo cual al menos en mi caso, reqiere bastante esfuerzo …

  15. Edgar dijo,

    el junio 2nd, 2006 a las 1:10 am

    Pues yo entre aqui sin tener ni siquiera idea de la POO, solo habia usado VB 6.0 y tengo un poco con PHP, no aprendi a construir ninguna clase, pero acabo de comprender la POO que hasta miedo me daba jeje, se ve que es muy sencillo y práctico.

    Muchas gracias por darte un tiempo para nosotros.

  16. Paramaconny dijo,

    el junio 19th, 2006 a las 7:12 pm

    Saludos a Todos, sería interesante que estos cursos puedan ser tambièn publicados en formato .pdf ò .doc etc… Gracias al Autor y participantes por su tiempo. A!!!! sera que puedan recomendar si existe, una herramienta Visual de PHP y que esté orientada a objetos y eventos???….

  17. Eduardo dijo,

    el agosto 29th, 2006 a las 7:34 am

    Sería posible obtenr el tutorial en formato pdf todo junto?
    Gracias desde ya.

  18. Wilmar dijo,

    el septiembre 1st, 2006 a las 7:08 pm

    Espero me puedan colaborar con la siguiente inquietud, resulta que poseidon es una herramienta que ayuda a generar codigo java (clases – atributos – metodos), es decir que me deja listo la estructura para comenzar a codificar. en PHP existe alguna herramienta similar que me gener el codigo.

    muchas gracias…

  19. Jorge dijo,

    el septiembre 5th, 2006 a las 12:22 am

    No se si sera el lugar apropiado pero estoy haciendo una web y me gustaria que me dijeran como hago para trabajar con plantillas en php, me explico: supongamos q yo tengo una pagina q se llama index.php alli muestra la pagina principal pero si yo cliqueo en un elace por ejemplo servicios este se valla a index.php?id=servicios y me muestre la pagina de servicios para solo tener que modificar una pagina en caso de nesecitarlo pero que su contenido no me cambie.

  20. johnny becerra dijo,

    el septiembre 26th, 2006 a las 1:18 pm

    me parece muy bien que haya codigos en php en la web para asi reutilizar esos códigos en mis tareas.
    quisiera aprender como se hace este formulario para enviar comentarios

    Estudiante de Informática…VI siclo

  21. Isabel dijo,

    el octubre 17th, 2006 a las 9:43 pm

    Pienso que faltan ejemplos.

  22. garpo dijo,

    el noviembre 5th, 2006 a las 8:50 pm

    Mi pregunta es la siguiente.
    Yo uso la clase ADODB para PHP y queria saber si puedo usar esa clase dentro de otra clase.
    podrias poner un ejemplo de un listado con una clase?.
    POr ejemplo el listado de clientes.
    Gracias!

  23. Yumi dijo,

    el noviembre 10th, 2006 a las 2:54 am

    Hola a todos he venido trabajando un tiempo con POO pero en java llegando a crear mis componetes (.jar), ahora quiero saber si en php puedo crear componentes, ojala puedan ayudarme….
    gracias!!

  24. alberto dijo,

    el diciembre 30th, 2006 a las 1:00 am

    tengo una duda…cuales serian las diferencias entre la programacion orientada a objetos y la programacion lineal…les agradeceria mucho si pudieran ayudarme

  25. KRL dijo,

    el febrero 6th, 2007 a las 7:13 am

    Muchas gracias por el articulo, me ha ayudado bastante gracias a que viene todo muy bien resumido. A los que dicen que hacen falta más ejemplos me parece que deverian estar buscando articulos sobre POO en general, y no sobre como aplicar POO en PHP que es de lo que trata el artículo y lo explica de maravilla.

  26. Ricardo dijo,

    el marzo 9th, 2007 a las 2:58 pm

    Me gusta!

    Una sugerencia: http://anacarol.blog.br/?p=107 y sus otros articulos .

  27. angvp dijo,

    el marzo 27th, 2007 a las 1:30 pm

    1.- Ya el artículo es viejo
    2.- En PHP5 tenemos métodos destructores con __destruct() así como tenemos los constructores con __construct()
    3.- La clonación de objetos se hace con la función clone

    Hay algunos errores en los ejemplos :/ última recomendación, quítale el paginado y hazle anchors, al tutorial, y si quieres actualizarlo, sólo avísame, saludos.

  28. guarus dijo,

    el marzo 30th, 2007 a las 12:08 am

    bueno a mi parecer tiene lo basico que hay que conocer sobre poo con php, sin embargo me gustaria que mostraran codigo donde implementen la agregacion y la composicion, del mismo modo como als otras caracteristicas de la poo.
    en mi caso particular llevo tiempo buscando dichas implementaciones y no las he podido conseguir, si alguien conoce un link o puede fasciliatrme los ejmplos le agradeceria.

  29. daniel dijo,

    el marzo 30th, 2007 a las 3:50 pm

    Estaría bueno que publicaran los tutoriales en pdf para poder descargarlos.


  30. el mayo 17th, 2007 a las 3:44 pm

    deberian ser mas especificos en cuanto a los programas

  31. Joe Black dijo,

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

    Me parece muy interesante estos artículos, bueno, ahora me dirijo a los comentarios, sobre que necesitan un ejemplo real aplicado, bueno si lo desean, pueden pedirlo en mi web, indicado mas arríba.
    saludos coordiales

  32. Jose dijo,

    el junio 24th, 2007 a las 11:20 am

    Muy poco amigable la forma en que está explicado.

  33. robert dijo,

    el julio 14th, 2007 a las 12:40 pm

    hola amigos si algui me posdria dsar una mano en cuanto se refiere a
    como crear un bookmark
    y como interactuar php com smarty y mvc

  34. Osvaldo dijo,

    el agosto 1st, 2007 a las 12:23 pm

    Empecé a aprender programación hace 8, sin ir a ningun curso ni comprar. Solamente siguiendo los tutoriales de los programas o en la web.
    He hecho muchas aplicaciones concretas en PHP, pero nunca pude utilizar objetos, pues no me quedaba claro.
    Pues bien, despues de leer este tutorial, siento que tengo los conceptos suficientes para utilizarlo.
    Aclaro que tengo 72 años, y a esta edad los nuevos conceptos se resisten a entrar, por lo que felicito al autor

  35. hectorjazz dijo,

    el septiembre 9th, 2007 a las 12:04 am

    Hola a todos,

    la oop en php a mejorado mucho con php5, les recomiendo si quieren saber mas sobre oop aparte de lo basico, apliquen patrones de diseño, es una muy buena forma de ver los objetos en accion, y despues cuando lleguen al mundo java veran que muchas de esos patrones son parte integral del lenguaje, cosa en php nop es asi…

    bueno

    saludos.. cualquier cosa me dicen

    bye


  36. el octubre 22nd, 2007 a las 9:06 am

    [...] Programación Orientada a Objetos en PHP [...]

  37. jorge dijo,

    el octubre 22nd, 2007 a las 7:30 pm

    Me lei el tutorial completo pero me parece que esta muy mal explicado.
    Saludos y ojala que reestructuren y cambien la forma de explicar este tema que cuando se parte es un poco complejo.

    exito.

  38. Javier dijo,

    el noviembre 6th, 2007 a las 8:13 am

    Me parece un tutorial suficiente para iniciarse. Pero podrían utilizarse las nuevas carcaterísticas de orientación a objetos que incorpora PHP a partir de su 5ª versión (los objetos como referencias, el estatus de acceso a las propiedades y métodos, los métodos constructores, etc), ya que son éstas las que verdaderamente consiguen asimilar más a PHP con otros lenguajes que emplean el enfoque OO.

    De todas formas, y a mi entender, con PHP no puedes crear un proyecto únicamente declarando clases, es decir, deberán existir scripts que creen los objetos y los utilicen de alguna forma. Esto implica que no es “puramente” orientado a objetos.

    Si alguien desea comentar algo sobre estos temas le estaría agradecido.

    Un saludo

  39. kits dijo,

    el diciembre 29th, 2007 a las 12:03 am

    hola amigos bueno me pregunta es la siguiente siempre kerido acer una pagina web con panel de administrasion con sql pero no puedo acer todavia porke no tengo una ayuda alguin q me pueda ayudar ai dejo mi correo :: ovmsistemas@hotmail.com

    gracias

  40. jeison dijo,

    el enero 29th, 2008 a las 2:15 am

    hola, tengo esta clase persona para añadir a una base de datos, el problema es que me sale el error, Fatal error: Call to undefined method persona::insetar_persona() in C:\wamp\www\clases\agregar_personas.php on line 9, la definición de la clase es la sgte:

    nombre=$nom;
    $this->telefono=$tel;
    $this->direccion=$dir;
    $this->correo=$mail;
    }
    function insertar_persona()
    {
    include”conectar_db.php”;
    $link=coneccion();
    $sql=”insert into personas (nombre,direccion,telefono,email) values ($this->nombre,$this->direccion,$this->telefono,$this->correo) “;
    $result = mssql_query($sql,$link);
    echo”registro insertado”;

    }

    }
    ?>

    llamo la clase del sgte forma:

    insetar_persona();

    ?>

    no se que estoy haciendo mal, estoy usando wamp server 2.0.
    quien pueda ayudar agradesco.

    Jeison

  41. jeison dijo,

    el enero 29th, 2008 a las 2:35 am

    hola! ya solucione el problema estaba bien, el problema era la forma de llamar el metodo de la clase, me faltaba la r en insertar
    insetar_persona(); y es
    $nueva_persona->insertar_persona();

    espero le sirva a alguien el código

    Jeison

  42. Luigi dijo,

    el febrero 20th, 2008 a las 3:33 pm

    Recien empiezo a ver php lo basico… y no se como relacionar tablas y como poner ususario y clave en MySQL.. alguien me puede ayudar…

  43. luxin_19 dijo,

    el junio 9th, 2008 a las 5:33 pm

    hola! ya solucione el problema estaba bien, el problema era la forma de llamar el metodo de la clase, me faltaba la r en insertar
    insetar_persona(); y es
    $nueva_persona->insertar_persona();

    espero le sirva a alguien el código

  44. Javi dijo,

    el junio 26th, 2008 a las 5:02 pm

    Se entiende todo perfecto. Exelente articulo.
    El que no lo entienda que empiece primero con algun manual de Php inicial


  45. el julio 30th, 2008 a las 12:06 am

    [...] – ZonaPHP – Maestros del Web – PHP en castellano 0 Comments Read [...]

  46. Anthony material_pz dijo,

    el agosto 19th, 2008 a las 11:18 pm

    La POO, es una forma de programar un poco más complicada que la estructurada, pero tiene mucho más ventajas sobre todo cuando se trata de proyectos grandes. El uso de clases, objetos y métodos hace que lo forma de programacion sea más ordenada, limpia y mucho más facil de entender para otros programadores que tomen nuestro código. Recien llevo dos meses programando en PHP, y según sé con PHP 5 recien se puede aplicar la POO, aunque con algunas desventajas como la de las variables ya que aun no se definen como decimal, char, varchar, integer, etc

  47. Marcela dijo,

    el octubre 8th, 2008 a las 8:59 am

    Muy beuno muchas gracias por compartir conocimientos

  48. christopher dijo,

    el octubre 17th, 2008 a las 1:48 am

    Yo creo que el titulo lo dice “programacion orientada a objetos con php” no C++ ni uml onda es olo orientado al lenguaje php, considerando que ya existen nociones previas de POO, googlen aprendan la “filosofia” de POO y de php basico y despues ingresan a esta pagina que se orienta a la aplicacion de POO en php.

    Saludos

  49. Edison Sira dijo,

    el marzo 17th, 2009 a las 10:26 am

    Excelente trabajo!!! Los felicito, he trabajado OOP con Delphi, C++, PHP y Java y me parece que el trabajo esta muy completo para un buen inicio en OOP con PHP, el resto queda de parte del lector.


  50. el mayo 18th, 2009 a las 12:50 pm

    [...] http://www.zonaphp.com/programacion-orientada-a-objetos-en-php/ http://www.webestilo.com/php/articulo.phtml?art=28 [...]

  51. cafer dijo,

    el julio 26th, 2009 a las 2:59 am

    Teniendo 6 años de avance desde que se escribió el artículo, el cual esta bien, con PHP 5.3 en uso, y mejorado todo lo que refiere a POO, quisiera decir que programar a objeto, segun mi experiencia, tiene mucho con el diseño del objeto en si, definir que hara el objeto es esencial, puede ayudar UML, pero la mayoria creo que se confundira mas. Lo mejor es ir probando con objetos simples como “un libro” ¿que atributos (caracteristicas) tiene? ¿que se puede hacer con el? es decir metodos o funciones, ej, ingresar en una coleccion determinada, prestarlo, devolverlo, darlo de baja, ingresarlo, etc.
    En definitiva es cambiar la forma de pensar como se dijo, eso es lo dificil, programar en POO es igual de facil o dificil que en forma estructurada, quizas por eso es tan dificil encontrar buenos ejemplos generales sobre POO.

  52. Oscar Balladares dijo,

    el septiembre 19th, 2009 a las 6:45 pm

    En mi particular caso es lo que andaba buscando.
    A mi parecer creo que el titulo de este artículo puede ser caprichoso y creo que algunos habrán creído que se trataba de “Aprender programación orientada objetos utilizando PHP”, cuando es más preciso “nomenclatura de la Programación Orientada a Objetos en PHP”.

    Para aprender Programación Orientada a Objetos no se necesita si quiera un lenguaje de programación, bastaría con usar pseudocódigo, y explicar las cosas con ejemplos prácticos.

    Por ejemplo: Una Clase es como un objeto común, (he ahí el nombre POO), para el ejemplo diré que una Clase es como un animal, este tiene características (en POO son Propiedades), color de piel, raza, estatura, peso; y este animal realiza ciertas acciones (en POO son los métodos) ladrar, correr, comer y reproducirse, etc. jojo.

    Ya hasta me dieron ganas de subir una pequeña intro a la POO con ejemplos aplicados en PHP ya que este tutorial me fue de ayuda, creo que al menos debería hacer el intento de retribuirlo (aunque no lo publiquen jaja).

    Saludos a todos y muy buen artículo.

  53. Gerardo dijo,

    el septiembre 30th, 2009 a las 6:31 pm

    hola buenas tardes, necesito ayuda, en la cuestion de la php oop , pues resulta que estoy haciendo un sistema, para mi residencia,
    y asi me liberen , pero la verdad, el tiempo ya se me vino ensima, y a penas conosco unos pequeños conceptos de php orientado a objetos, soy novato.
    alguno de los usuarios de este foro me podria ayudar, con este problema.
    dejo mi correo para que se contacten conmigo
    gci3@hotmail.com

  54. Omar dijo,

    el marzo 26th, 2010 a las 4:40 pm


    ZonaPHP

    No solo un blog, sino toda la información sobre PHP


    Te quedas corto!!!


  55. el octubre 22nd, 2010 a las 9:55 am

    Muy muy bueno, gracias!

  56. Lalo dijo,

    el noviembre 10th, 2010 a las 8:46 pm

    Gracias por los conceptos desarrollados. Se puede decir que ahora entiendo un poco mas de Objetos y con esta base ver si puedo arrancar con Symfony.
    Saludos, sigan así.

  57. Leon dijo,

    el enero 24th, 2011 a las 4:36 pm

    Apenas se nada de poo php

    //creamos la class saludo

    class saludo {

    //creamos el metodo saludar

    public function saludar();
    {
    echo “HOLA MUNDO “;
    }
    }
    //instanciamos el objeto $objeto;

    $objeto=new saludo;

    //llamamos al metodo saludar;

    $objeto->saludar();

    //esto imprimira en pantalla hola mundo!!

Deja un comentario