Programación Orientada a Objetos en PHP
Técnicas avanzadas de POO en PHP
Luego de aprender los conceptos básicos de la POO, les puedo mostrar algunas técnicas más avanzadas:
Serialización
PHP no soporta Objetos Persistentes. En POO los Objetos Persistentes son aquellos que mantienen su estado y funcionalidad a través de múltiples invocaciones de la aplicación, esto es, la habilidad de "grabar" el objeto a un archivo o base de datos y luego "cargarlo" nuevamente. Este mecanismo es conocido como Serialización. PHP tiene una función de serialización que puede ser utilizada con objetos, y devuelve una cadena que representa a ese objeto. Sin embargo la serialización guarda los atributos pero no los métodos.
En PHP4, si uno serializa un objeto hacia una cadena $s, luego se destruye el objeto y luego se vuelve a des-serializar el objeto hacia $obj, aún se puede tener acceso a los métodos! Yo en realidad no recomiendo esto porque (a) La documentación no garantiza este funcionamiento y en futuras versiones de PHP puede dejar de existir. (b) Esto puede llevar a crear "ilusiones" de grabar el objeto serializado en una cadena y salir del script. En futuras ejecuciones del script, no podrás des-serializar la cadena hacia un objeto y esperar que los métodos estén alli, porque la cadena que representa al objeto no guarda los métodos del mismo. Resumiendo, la serialización en PHP es MUY útil para guardar los atributos de un objeto, pero solo eso. (También se pueden serializar arreglos simples y asociativos para guardarlos en disco).
Ejemplo
-
<?php
-
$obj=new ClaseFoo();
-
// Grabamos $cadena a disco
-
-
//...algunas miles de instrucciones después....
-
-
//Cargamos $cadena del disco
-
?>
Obtendremos los atributos pero no los métodos (de acuerdo a la documentación). Esto nos lleva a que sea $obj2->x la única manera de acceder a los atributos (ya que no tenemos métodos para hacerlo!) así que no intenten hacer esto en sus casas.
Hay algunas maneras de solucionar este problema, pero se las dejo para que las invetiguen, ya que son muy "chanchas" para este lindo artículo.
Serialización Completa es una característica que apreciaría mucho en futuras versiones de PHP.

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!
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.
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.
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
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.
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.
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.
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
el Febrero 19th, 2006 a las 4:31 pm
el curso es muy básico, donde puedo conseguir mas información?
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
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
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 .
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)
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 …
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.
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???….
el Agosto 29th, 2006 a las 7:34 am
Sería posible obtenr el tutorial en formato pdf todo junto?
Gracias desde ya.
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…
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.
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
el Octubre 17th, 2006 a las 9:43 pm
Pienso que faltan ejemplos.
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!
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!!
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
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.
el Marzo 9th, 2007 a las 2:58 pm
Me gusta!
Una sugerencia: http://anacarol.blog.br/?p=107 y sus otros articulos .
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.
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.
el Marzo 30th, 2007 a las 3:50 pm
Estaría bueno que publicaran los tutoriales en pdf para poder descargarlos.
el Mayo 17th, 2007 a las 3:44 pm
deberian ser mas especificos en cuanto a los programas
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
el Junio 24th, 2007 a las 11:20 am
Muy poco amigable la forma en que está explicado.
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
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
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
el Octubre 22nd, 2007 a las 9:06 am
[...] Programación Orientada a Objetos en PHP [...]
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.
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
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
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
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
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…
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
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
el Julio 30th, 2008 a las 12:06 am
[...] – ZonaPHP – Maestros del Web – PHP en castellano 0 Comments Read [...]
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
el Octubre 8th, 2008 a las 8:59 am
Muy beuno muchas gracias por compartir conocimientos
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
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.
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 [...]
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.
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.
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