PHP es un lenguaje de programacin interpretado, diseado originalmente para la creacin de pginas
web dinmicas. Se usa principalmente para la interpretacin del lado del servidor (server-side scripting) pero actualmente puede ser utilizado desde una interfaz de lnea de comandos o en la creacin de otros tipos de programas incluendo aplicaciones con interfaz grfica usando las bibliotecas !t o "#$%. Qt es una biblioteca multiplataforma ampliamente usada para desarrollar aplicaciones con una interfaz grfca de usuario as como tambin para el desarrollo de programas sin interfaz grfca como herramientas para la linea de comandos y consolas para servidores. Qt es utilizada principalmente en Autodesk Maya !
" #assault #raft$ight %
& 'oogle (arth )#( Adobe *hotoshop Album la Agencia (spacial (uropea + ,pie $iemens - .olvo / 0alt #isney Animation $tudios 12 $kype Qt (3tended .45 media player $amsung 11 *hilips 16 *anasonic 1! .irtual7o3 y Mathematica. 1" (s producido por la divisi8n de soft9are Qt de :okia ;ue entr8 en vigor despus de la ad;uisici8n por parte de :okia de la empresa noruega <rolltech el productor original de Qt el 1+ de =unio de 622-. 1% :okia anuncio ;ue va a detener sus desarrollos en $ymbian para usar la plataforma de Microsoft para sus telefonos inteligentes en >ebrero de 6211. (n marzo del mismo a?o anunciaron la ad;uisici8n de las licencias comerciales de Q< por #igia *45 aun;ue :okia va a continuar como la fuerza de desarrollo principal atrs de la librera. Qt es utilizada en )#( un entorno de escritorio para sistemas como ':@A4inu3 o >ree7$# entre otros. Qt utiliza el lengua=e de programaci8n 5BB de forma nativa adicionalmente puede ser utilizado en varios otros lengua=es de programaci8n a travs de bindings. >unciona en todas las principales plataformas y tiene un amplio apoyo. (l A*C de la biblioteca cuenta con mtodos para acceder a bases de datos mediante $Q4 as como uso de DM4 gesti8n de hilos soporte de red una A*C multiplataforma unifcada para la manipulaci8n de archivos y una multitud de otros para el mane=o de fcheros adems de estructuras de datos tradicionales. #istribuida ba=o los trminos de ':@ 4esser 'eneral *ublic 4icense Ey otrasF Qt es soft9are libre y de c8digo abierto. Qt Designer usado para el diseo del "&'. GTK+ o The GIMP Toolkit es un con=unto de bibliotecas multiplataforma para desarrollar interfaces grfcas de usuario E'@CF principalmente para los entornos grfcos ':,M( D>5( y G,D aun;ue tambin se puede usar en el escritorio de 0indo9s Mac,$ y otros. Cnicialmente fueron creadas para desarrollar el programa de edici8n de imagen 'CM* sin embargo actualmente se usan bastante por muchos otros programas en los sistemas ':@A4inu3. Hunto a Qt es una de las bibliotecas ms populares para D 0indo9 $ystem. '<)B se ha dise?ado para permitir programar con lengua=es como 5 5BB 5I Hava Guby *erl *J* o *ython. 4icenciado ba=o los trminos de 4'*4 '<)B es soft9are libre y es parte del proyecto ':@ ()( es un acrnimo recursivo *ue significa PHP Hypertext Pre-processor (inicialmente PHP Tools, o, Personal Home Page Tools). +ue creado originalmente por ,asmus -erdorf en .//01 sin embargo la implementacin principal de ()( es producida a2ora por #2e ()( "roup sirve como el estndar de facto para ()( al no 2aber una especificacin formal. (ublicado bajo la ()( -icense, la +ree Software +oundation considera esta licencia como software libre. (uede ser desplegado en la maora de los servidores web en casi todos los sistemas operativos plataformas sin costo alguno. 3l lenguaje ()( se encuentra instalado en ms de 45 millones de sitios web en un milln de servidores, el n6mero de sitios en ()( 2a compartido algo de su preponderante sitio con otros nuevos lenguajes no tan poderosos desde agosto de 4557. 3ste mismo sitio web de 8i9ipedia est desarrollado en ()(. 3s tambi:n el mdulo ;pac2e ms popular entre las computadoras *ue utilizan ;pac2e como servidor web. 3l gran parecido *ue posee ()( con los lenguajes ms comunes de programacin estructurada, como < (erl, permiten a la maora de los programadores crear aplicaciones complejas con una curva de aprendizaje mu corta. #ambi:n les permite involucrarse con aplicaciones de contenido dinmico sin tener *ue aprender todo un nuevo grupo de funciones. ;un*ue todo en su diseo est orientado a facilitar la creacin de sitios webs, es posible crear aplicaciones con una interfaz grfica para el usuario, utilizando la e=tensin ()(>!t o ()(>"#$. #ambi:n puede ser usado desde la lnea de rdenes, de la misma manera como (erl o (t2on pueden 2acerlo1 a esta versin de ()( se la llama ()(><-' (Command Line Interface). <uando el cliente 2ace una peticin al servidor para *ue le enve una pgina web, el servidor ejecuta el int:rprete de ()(. ?ste procesa el script solicitado *ue generar el contenido de manera dinmica (por ejemplo obteniendo informacin de una base de datos). 3l resultado es enviado por el int:rprete al servidor, *uien a su vez se lo enva al cliente. @ediante e=tensiones es tambi:n posible la generacin de arc2ivos (A+, +las2, as como imgenes en diferentes formatos. (ermite la cone=in a diferentes tipos de servidores de bases de datos tales como @S!-, (ostgreS!-, Bracle, BAC<, AC4, @icrosoft S!- Server, +irebird S!-ite. D;@(( es un servidor independiente de plataforma, software libre, *ue consiste principalmente en la base de datos @S!-, el servidor 8eb ;pac2e los int:rpretes para lenguajes de scriptE ()( (erl. 3l nombre proviene del acrnimo de D (para cual*uiera de los diferentes sistemas operativos), ;pac2e, @S!-, ()(, (erl. 3l programa est liberado bajo la licencia "F& act6a como un servidor 8eb libre, fcil de usar capaz de interpretar pginas dinmicas. ;ctualmente D;@(( esta disponible para @icrosoft 8indows, "F&G-inu=, Solaris, @acBS D. ()( tambi:n tiene la capacidad de ser ejecutado en la maora de los sistemas operativos, tales como &ni= ( de ese tipo, como -inu= o @ac BS D) @icrosoft 8indows, puede interactuar con los servidores de web ms populares a *ue e=iste en versin <"', mdulo para ;pac2e, e 'S;('. ()( es una alternativa a las tecnologas de @icrosoft ;S( ;S(.F3# (*ue utiliza <H Iisual Casic .F3# como lenguajes), a <old+usion de la empresa ;dobe, a JS(GJava a <"'G(erl. ;un*ue su creacin desarrollo se da en el mbito de los sistemas libres, bajo la licencia "F&, e=iste adems un entorno de desarrollo integrado comercial llamado Kend Studio. ,ecientemente, <ode"ear (la divisin de lenguajes de programacin de Corland) 2a sacado al mercado un entorno de desarrollo integrado para ()(, denominado LAelp2i for ()(. #ambi:n e=isten al menos un par de mdulos para 3clipse, uno de los entornos ms populares. Historia +ue originalmente diseado en (erl, con base en la escritura de un grupo de <"' binarios escritos en el lenguaje < por el programador dan:s>canadiense ,asmus -erdorf en el ao .//0 para mostrar su currculum vtae guardar ciertos datos, como la cantidad de trfico *ue su pgina web reciba. 3l M de junio de .//7 fue publicado N(ersonal )ome (age #oolsN despu:s de *ue -erdorf lo combinara con su propio Form Interpreter para crear ()(G+'. PHP 3 Aos programadores israeles del #ec2nion, Keev Suras9i ;ndi "utmans, reescribieron el analizador sintctico (parser en ingl:s) en el ao .//O crearon la base del ()(P, cambiando el nombre del lenguaje a la forma actual. 'nmediatamente comenzaron e=perimentaciones p6blicas de ()(P fue publicado oficialmente en junio de .//M. (ara .///, Suras9i "utmans reescribieron el cdigo de ()(, produciendo lo *ue 2o se conoce como motor Kend. #ambi:n fundaron Kend #ec2nologies en ,amat "an, 'srael. PHP 4 3n mao de 4555 ()( 0 fue lanzado bajo el poder del motor Kend 3ngine ..5. 3l da .P de julio de 455O se anunci la suspensin del soporte desarrollo de la versin 0 de ()(, 4 a pesar de lo anunciado se 2a liberado una nueva versin con mejoras de seguridad, la 0.0.M publicada el .P de enero del 455M posteriormente la versin 0.0./ publicada el O de agosto de 455M. P Seg6n esta noticia Q.R se dar soporte a fallos crticos 2asta el / de agosto de 455M. PHP 5 3l .P de julio de 4550, fue lanzado ()( 7, utilizando el motor Kend 3ngine 4.5 (o Kend 3ngine 4). -a versin ms reciente de ()( es la 7.P.S (.O de marzo de 45..), *ue inclue todas las ventajas *ue provee el nuevo Kend 3ngine 4 comoE Mejor soporte para la programacin orientada a objetos, que en versiones anteriores era extremadamente rudimentario. Mejoras de rendimiento. Mejor soporte para MySQL con extensin completamente reescrita. Mejor soporte a XML (Xat!, "#M, etc.$. Soporte nativo para SQLite. Soporte integrado para S#%. &teradores de datos. Manejo de excepciones. Mejoras con la implementacin con #racle. ;6n se siguen publicando versiones de la rama 7.4.D, siendo publicada la versin 7.4..0 el 44 de julio de 45.5, aun*ue la maora son actualizaciones de seguridad. PHP 6 3st previsto el lanzamiento en breve de la rama S de ()(. <uando se lance esta nueva versin *uedarn solo dos ramas activas en desarrollo (()( 7 S), pues se abandon el desarrollo soporte de ()( 0 el .P de julio de 455O. 0 -as diferencias en comparacin con ()( 7 sonE 'ompatible con (nicode. Limpie)a de *uncionalidades obsoletas como registerKglobals, safeKmode, etc. +'L y eliminacin de soporte ereg. Mejoras en orientacin a objetos. &nclusin en el n,cleo de 3mlGeader y 3ml0riter as- como >ileinfo. return por re*erencia devuelve un error. Se retir el soporte de las bibliotecas >ree<ype1 y '#1. Versiones Versin Fecha Cambios ms importantes . /.0 1 de junio de /223 #4cialmente llamado 5.erramientas personales de trabajo (. 6ools$5. +s el primer uso del nombre 5.5. . 7ersion 8 (.9:&$ /; de abril de /22; 'onsiderado por el creador como la 5m<s r<pida y simple !erramienta5 para la creacin de p<ginas =ebs din<micas . . >.0 ; de junio de /221 "esarrollo movido de una persona a muc!os desarrolladores. ?eev Suras@i y %ndi Autmans reescriben la base para esta versin. . B.0 88 de mayo de 8000 Se aCade un sistema m<s avan)ado de an<lisis de etiquetas en dos *ases an<lisis9ejecucin llamado el motor ?end. . B./ /0 de diciembre de 800/ &ntroducidas las variables superglobals (DEA+6, DES+SS&#F, etc.$. . B.8 88 de abril de 8008 Se des!abilitan registerEglobals por de*ecto. . B.> 8G de diciembre de 8008 &ntroducido la 'L&, en adicin a la 'A&. . B.B // de julio de 8003 . 3.0 /> de julio de 800B Motor ?end && con un nuevo modelo de objetos. . 3./ 83 de noviembre de 8003 . 3.8 8 de noviembre de 800; .abilitado el 4ltro de extensiones por de*ecto. . 3.8.B >0 de agosto de 800G . 3.8.3 1 de noviembre de 800G 7ersin centrada en mejorar la estabilidad (H;0 errores solucionados$. . 3.8.1 1 de diciembre de 8001 . 3.8.2 8; de *ebrero de 8002 "iversas mejoras en el <mbito de la seguridad (H30 errores solucionados$. . 3.8./8 /G de diciembre de 8002 "iversas mejoras en el <mbito de la seguridad (H30 errores solucionados$. . 3.> >0 de junio de 8002 namespaces, late static binding, closures, optional garbage collection *or cyclic re*erences, nuevas extensiones (H/B0 errores solucionados$. . 3.>./ /2 de noviembre de 8002 "iversas mejoras en el <mbito de la seguridad (>; errores solucionados$. . 3.>.8 B de mar)o de 80/0 "iversas mejoras en el <mbito de la seguridad (22 errores solucionados$. . 3.>.> 88 de julio de 80/0 "iversas mejoras en el <mbito de la seguridad y estabilidad (m<s de /00 errores solucionados$. . 3.>.B /0 de diciembre de 80/0 "iversas mejoras en el <mbito de la seguridad y estabilidad (/03 errores solucionados$. . 3.>.3 ; de enero de 80// +sta versin soluciona un problema cr-tico, reportado como bug I 3>;>8 . y '7+J 80/0JB;B3, relacionado con las conversiones de cadena a double. . 3.>.; G de mar)o de 80// +sta versin soluciona un problema cr-ticoKI3B/2>,I3B033,I3B008,I3>113,I3B8BG,Mejora la seguridad con el an<lisis del protocolo *astcgi con *pm S%&. . ; S9" Caractersticas de PHP Ventajas +s un lenguaje multiplata*orma. #rientado al desarrollo de aplicaciones =eb din<micas con acceso a in*ormacin almacenada en una base de datos. +l cdigo *uente escrito en . es invisible al navegador =eb y al cliente ya que es el servidor el que se encarga de ejecutar el cdigo y enviar su resultado .6ML al navegador. +sto !ace que la programacin en . sea segura y con4able. 'apacidad de conexin con la mayor-a de los motores de base de datos que se utili)an en la actualidad, destaca su conectividad con MySQL y ostgreSQL. 'apacidad de expandir su potencial utili)ando mdulos (llamados e3tLs o extensiones$. osee una amplia documentacin en su sitio =eb o4cial, entre la cual se destaca que todas las *unciones del sistema est<n explicadas y ejempli4cadas en un ,nico arc!ivo de ayuda. +s libre, por lo que se presenta como una alternativa de *<cil acceso para todos. ermite aplicar tLcnicas de programacin orientada a objetos. Miblioteca nativa de *unciones sumamente amplia e incluida. Fo requiere de4nicin de tipos de variables aunque sus variables se pueden evaluar tambiLn por el tipo que estLn manejando en tiempo de ejecucin. 6iene manejo de excepciones (desde .3$. Si bien . no obliga a quien lo usa a seguir una determinada metodolog-a a la !ora de programar (muc!os otros lenguajes tampoco lo !acen$, aun !aciLndolo, el programador puede aplicar en su trabajo cualquier tLcnica de programacin o de desarrollo que le permita escribir cdigo ordenado, estructurado y manejable. (n ejemplo de esto son los desarrollos que en . se !an !ec!o del patrn de diseCo Modelo 7ista 'ontrolador (M7'$, que permiten separar el tratamiento y acceso a los datos, la lgica de control y la inter*a) de usuario en tres componentes independientes. Inconvenientes 'omo es un lenguaje que se interpreta en ejecucin, para ciertos usos puede resultar un inconveniente que el cdigo *uente no pueda ser ocultado. La o*uscacin es una tLcnica que puede di4cultar la lectura del cdigo pero no la impide y, en ciertos casos, representa un costo en tiempos de ejecucin. Ejemplo de cdigo PHP 3n el siguiente ejemplo se muestra el tpico programa )ola mundo, *ue es una simple impresin por pantalla de ese mensajeE <?php $mivariable = 'Hola Mundo'; echo $mivariable; ?> 3l ejemplo anterior escribira simplemente N)ola @undoN (sin comillas) en la pgina web. 3s importante recordar *ue todo blo*ue de cdigo ()( debe estar dentro de <?php ?>, *ue son las eti*uetas de apertura cierre, respectivamente1 o simplemente de una forma ms corta TU T<VA'"BW()(X UX (siempre *ue la directiva short_open_tag est: activada), 7 mu parecido a las eti*uetas en ;S( TY T<VA'"BW;S(X YX. 3=isten algunas e=cepciones por las cuales tanto la eti*ueta de cierre como el punto coma es opcional, como podemos ver en p2p.netE <?php echo 'Esto es una prueba'; ?>
<?php echo 'Esto es una prueba' ?>
<?php echo 'Hemos omitido la ltima etiqueta de cerrado'; N-a eti*ueta de fin de blo*ue de ()( automticamente implica un punto coma. Fo se tiene *ue usar punto coma para cerrar la 6ltima lnea de cdigo de ()(N. N-a eti*ueta de fin de blo*ue es opcional al final del arc2ivo es 6til omitirlo cuando se utilizan sentencias include() o re*uire(), para *ue no se produzcan espacios en blanco al final de los arc2ivos cuando se *uieren mandar cabeceras de 2ttp. #ambi:n sirve cuando se captura la salida con output buffering no se desean espacios innecesarios al final de partes generadas por arc2ivos incluidosN. ; continuacin un ejemplo de envo recepcin de datos en una misma pgina con ()(E <html> <head> <title>Ejemplo de uso simple en envo ! recepci"n de par#metros con $H$<%title> <%head> <bod!>
<?php %% &i e'iste la variable $($)&*+'comida',- entonces muestra la comida .avorita i. /isset/$($)&*+'comida',00 1 echo 'Hola- ' 2 $($)&*+'nombre', 2 '- tu comida .avorita es3 ' 2 $($)&*+'comida',; 4 else 1 %% &i no- muestra un .ormulario solicitando la comida .avorita ?>
<.orm method=5$)&*5 action=5<?php echo $(&E67E6+'$H$(&E89',; ?>5> :;u#l es tu nombre? <input t!pe=5te't5 name=5nombre5 %> :;u#l es tu comida .avorita? <select name=5comida5> <option value=5&pa<uetis5>&pa<uetis<%option> <option value=5=sado5>=sado<%option> <option value=5$i>>a5>$i>>a<%option> <%select> <input t!pe=5submit5 name=5muestra5 value=5&e<uir5 %> <%.orm>
<?php 4 %%9in del bloque else ?>
<%bod!> <%html> 3n este cdigo es posible observar las siguientes caractersticasE Las variables enviadas por un *ormulario utili)ando el mLtodo #S6, son recibidas en el lenguaje dentro de la matri) $($)&*, lo cual *acilita la obtencin de este tipo de datos. +ste mismo mLtodo es utili)ado por el lenguaje para todas las *uentes de in*ormacin en una aplicacin =eb, tales como coo@ies en la matri) $(;))?@E&, variables de (NL en $(AE* (que en *ormularios puede servir para guardar los datos$, variables de sesin utili)ando $(&E&&@)B, y variables del servidor y del cliente por medio de la matri) $(&E67E6. Las variables que est<n dentro de las cadenas $($)&*, $(AE* y $(;))?@E pueden encontrarse en la cadena $(6ECDE&*, ya que Lsta resume las > anteriores. +l cdigo . est< incrustado dentro del .6ML e interact,a con el mismo, lo que permite diseCar la p<gina Oeb en un editor com,n de .6ML y aCadir el cdigo din<mico dentro de las etiquetas <?php ?>. +l resultado muestra y oculta ciertas porciones del cdigo .6ML en *orma condicional. +s posible utili)ar *unciones propias del lenguaje para aplicaciones Oeb como htmlentitites/0, que convierte los caracteres que tienen alg,n signi4cado especial en el cdigo .6ML o que podr-an desplegarse errneamente en el navegador como acentos o diLresis, en sus equivalentes en *ormato .6ML. #odas las variables en ()( llevan el smbolo de dlar como prefijo (ejemploE Zvariable., Zvariable4, ZvariableP...,ZvariableF), los tipos de variable no es necesario declararlas, a *ue a medida *ue se usan en la aplicacin el servidor reconoce de *ue tipo son. (ara mostrar una cadena (en ingl:s string) debe estar dentro de comillas dobles o simples (ejemploE N)ola @undoN, L-o *ue *uiero mostrarL). <abe destacar *ue si se desea mostrar el smbolo N o L debe encerrarse en el otro tipo de comillas (5Este es 'mi' mundo5, '&r2 &oborno 5<uiEo <uiEo52') o usarse el smbolo de escape ('FhonG's child', 5)curre G5al<oG5 raro aqu5). #oda lnea de instruccin debe terminar en un punto coma (1), al igual *ue el lenguaje < salvo en los ejemplos anteriormente comentados. (ara insertar un comentario de una sola lnea, debe empezar por %% o por H. 3l resto de la lnea es tratado entonces como un comentario. (ara insertar un blo*ue de comentario, de una o ms lneas, se utiliza la combinacin %I I%, por ejemploE <?php
$.rutas = J; $.rutas K= L; H sumamos L a $.rutas echo 5;omprM $.rutas pie>as de .ruta25; %% Nobles comillas evala $variables %% 8o anterior es equivalente a echo ';omprM ' 2 $.rutas 2 ' pie>as de .ruta2';
%I Esto es un comentario multiOlnea siP otra lnea de comentarios I% echo 'Hola mundoP';
?> Programacin orientada a objetos en PHP ()( no es en s un lenguaje de programacin orientada a objetos, pero desde 2ace a unas versiones se 2a implementado el uso de clases objetos. ;*u tenemos un ejemplo de una clase sencilla en ()(E class ;lase 1 var $Dna(variable; %%;reamos las variables var $)tra(variable;
.unction ;lase/$varQ- $varR01 %%;reamos un constructor que de.ina las variables 5Dna(variable5 ! 5)tra(variable5 dentro de la clase2 $thisO>Dna(variable = $varQ; $thisO>)tra(variable = $varR; 4 4 ;2ora veremos como se llama a la clase previamente creadaE $clase = neS ;lase/5Esta es la variable Q5- 5Esta es la variable R50; 3l ejemplo anterior es vlido para p2p0, el mismo ejemplo escrito p2p7, vara en el nombre del constructor en la forma en como se declara la variable. <?php
class ;lase 1 public $Dna(variable; %%;reamos las variables para phpJ public $)tra(variable;
.unction ((construct/$varQ- $varR01 %%;reamos un constructor que de.ina las variables 5Dna(variable5 ! 5)tra(variable5 dentro de la clase2 $thisO>Dna(variable = $varQ; $thisO>)tra(variable = $varR; 4 4
$instancia = neS ;lase/'rojo'-'blanco'0;
echo 5El color de la variable G$Dna(variable es 3 52 $instanciaO>Dna(variable 2 5 El color de la otra variable G$)tra(variable es3 5; $instanciaO>)tra(variable;
?> 3l valor public indica *ue la propiedad o el m:todo estn disponible para todo cdigo *ue desee acceder a los mismos. ()( 7 ofrece tres niveles de visibilidad para utilizar en clasesE public, private, protected. ; la vez, cambia la forma en la *ue se declara el constructor de la clase, a *ue en ()( 0 se usaba el mismo nombre de esta, en ()( 7 se crea el m:todo especial ((construct &na de las ventajas *ue ofrece ()( desde su versin 7.5 es la capacidad de utilizar completamente el paradigma de programacin *ue se conoce como Programacin Orientada a Objetos ((BB de a2ora en adelante). POO utiliza [objetos\ estructuras de datos *ue consisten en propiedades m:todos. 3ste paradigma intenta representar las partes de una aplicacin Go la aplicacin completa de una forma ms 2umana. Componentes pilares de la POO. (ara entender la (BB es necesario dominar los siguientes conceptos. Objeto. Se refiere com6nmente a atributos (elementos) comportamientos (m:todos) encapsulados en una entidad. Son un m:todo natural para implementar estructuras de datos abstractos, traendo [fsicamente\ componentes de datos con procedimientos para luego manipularlos. #odo objeto tiene estado, e=2ibe un comportamiento bien definido posee identidad 6nica. Clase. 3s un tipo de dato definido por el programador *ue determina las estructuras de datos *ue lo forman las funciones asociadas con :l, es decir es un modelo con el *ue se construen los objetos. Se define como el constructor utilizado como [plano\ para crear un Bbjeto. Aescribe el estado el comportamiento del objeto creado. &n objeto creado por una <lase es una instancia de la clase la clase *ue cre esa instancia es considerado como el tipo del objeto. &n ejemplo de un objeto creado por una clase [fruta\ sera [pia\, otro [pera\ as sucesivamente. 3s la abstraccin de un concepto. Instancia. Se crea cuando una construe un objeto. -as instancias de una clase comparten los mismo atributos pero pueden diferir en *u: los atributos contengan. (or ejemplo una clase [(ersona\ describe los atributos comunes de una persona1 cada persona es generalmente parecida, pero vara en atributos como [altura\ [peso\. -a clase listara tipos de atributos, as como tambi:n las acciones *ue una persona podra realizarE [saltar\, [caminar\, [andar\, [comer\. -a instancia es el objeto creado en tiempo de corrida de una aplicacin. Btro ejemplo seraE [-assie\ es una instancia de la clase [(erro\ as tambi:n [(luto\ sera otra instancia de la misma clase. Caractersticas bases de la POO. Herencia. 3s la capacidad formar nuevas <lases usando clases previamente definidas. -as nuevas clases, conocida como <lases Aerivadas, toman (o 2eredan) los atributos los m:todos pree=istentes de la clase [madre\. 3s una intento para audar a reusar cdigo con poca o casi ninguna modificacin. Mtodos. Se refiere como las funciones de un objeto. Abstraccin. 3s un concepto o idea no asociada a una instancia. 3l concepto se origin por la analoga con las abstraccin en matemticas. #ericamente envuelve la facilidad de definir objetos *ue representan [actores\ abstractos *ue pueden realizar un trabajo o accin. &n ejemplo sera una clase [casa\ *ue defina la estructura de una casa. Encapsulamiento. Se refiere a [esconder\ el estado de una propiedad o m:todo de un objeto. Polimorfismo. 3s la 2abilidad de un tipo [;\ *ue aparece es usado como otro tipo [C\. Significa *ue un tipo [;\ de alguna manera deriva de un tipo [C\ o *ue un tipo [;\ implementa una interface *ue representa un tipo [C\. (or ejemplo, si a un [(erro\ se le ordenara *ue 2ablara, :ste ladrara, mas si a un [<erdo\ se le ordenara *ue 2ablara respondera con un [oin oin[. Constante. 3s la e*uivalencia de variable global de la programacin estructurada. entajas de la POO :omenta la reutili)acin y extensin del cdigo. ermite crear sistemas m<s complejos. Nelacionar el sistema al mundo real. :acilita la creacin de programas visuales. 'onstruccin de prototipos %gili)a el desarrollo de so*t=are :acilita el trabajo en equipo :acilita el mantenimiento del so*t=are -o interesante de la (BB es *ue proporciona conceptos 2erramientas con las cuales se modela representa el mundo real tan fielmente como sea posible. POO en PHP ! <ada definicin de una clase comienza con palabras clave [class\, seguido de un nombre de clase, *ue puede ser cual*uier nombre *ue no es una palabra reservada en ()(. -uego por un par de llaves, *ue contiene la definicin de los miembros de las clases m:todos. &na pseudovariable Zt2is est disponible cuando un m:todo se llama desde un objeto dentro del mismo conte=to. Zt2is es una referencia al objeto de la convocatodo (por lo general, el objeto al *ue pertenece el m:todo, pero puede ser otro objeto, si el m:todo es llamado estticamente desde el conte=to de un objeto secundario). #odo esto *ueda ilustrado en los ejemplos siguientesE Ejemplo "# $ariable %t&is Q R L T J U V W X QY QQ QR QL QT QJ QU QV QW QX RY RQ RR RL RT RJ RU RV RW RX LY < ?php class = 1 function .oo/0 1 i. /isset/$this00 1 echo '$this esta de.inido /'; echo <et(class/$this0; echo 50\n5; 4 else 1 echo 5\$this no esta de.inido2\n5; 4 4 4
class Z 1 function bar/0 1 =33.oo/0; 4 4
$a = new =/0; $aO>.oo/0; =33.oo/0; $b = new Z/0; $bO>bar/0; Z33bar/0; ?> -a salida sera la siguienteE Zt2is is defined (a) Zt2is is not defined. Zt2is is defined (b) Zt2is is not defined. Ejemplo "' (efinicin simple de una Clase Q R L T J U V W < ?php class &imple;lass 1 // member declaration public $var = 'a de.ault value';
// method declaration public function displa!7ar/0 1 X QY QQ QR echo $thisO>var; 4 4 ?> Ejemplo ") alores por defecto de los miembros de una clase Q R L T J U V W X QY QQ QR QL QT QJ QU QV QW < ?php class &imple;lass 1 // invalid member declarations: public $varQ = 'hello '2'Sorld'; public $varR = <<<EOD hello world EOD; public $varL = QKR; public $varT = self33m!&taticMethod/0; public $varJ = $m!7ar;
// valid member declarations: public $varU = m!;onstant; public $varV = self33class;onstant; public $varW = arra!/true- false0; 4 ?> Creando una Instancia (ara crear una instancia de una clase un nuevo objeto debe ser creado asignado a una variable. &n objeto ser siempre asignado cuando se crea un nuevo objeto al menos *ue el objeto tenga un constructor definido *ue arroje una e=cepcin en caso de error. -as clases deben ser definidas antes de crear la instancia. Ejemplo "* Creando una Instancia Q R L T J U V < ?php $instance = new &imple;lass/0;
// This can also be done with a variable: $classBame = '9oo'; $instance = new $classBame/0; // Foo() ?> E+tendiendo una clase &na clase puede 2eredad m:todos miembros de otra clase usando la plabra clave [e=tends\ en la declaracin. Fos es posible e=tender de m6ltples clases, una clase puede solo 2eredar de una clase base. -os m:todos miembros 2eredados pueden ser sobreescribidos al menos *ue la clase lo defina como [final\, redeclarndolo con el mismo nombre *ue en la clase padre. Ejemplo "! Heredando de una Clase Q R L T J U < ?php class E'tend;lass extends &imple;lass 1 // Redefine the parent method function displa!7ar/0 1 V W X QY QQ QR QL QT echo 5E'tendin< class\n5; parent33displa!7ar/0; 4 4
$e'tended = new E'tend;lass/0; $e'tendedO>displa!7ar/0; ?> Constantes 3s posible definir valores constantes en una clase. -as <onstantes difieren de las variables normales en *ue no se usa el smbolo [Z\ para declararlas. 3l valor debe ser una e=presin constante, no una variable, ni tampoco el resultado de una operacin matemtica. Ejemplo ", (efiniendo - usando una constante Q R L T J U V W X QY QQ QR QL QT QJ QU QV QW QX RY < ?php class M!;lass 1 const constant = 'constant value';
function shoS;onstant/0 1 echo self33constant 2 5\n5; 4 4
echo $class33constant25\n5; // PP !"#"$ ?> Conclusin )asta a*u llega la primera parte de la Programacin Orientada a Objetos en ()( 7. ;6n faltan muc2as otras caractersticas interesantes *ue sern tratadas ms adelante. Se recomienda dominar bien el concepto de Bbjeto <lase, a *ue el resto es pura sinta=is. ,ecomiendo *ue prueben los ejemplos a*u mostrados para un maor dominio del tema. .ases sobre las /ue se asienta la Programacin Orientada a Objetos. -a programacin Brientada a objetos ((BB) es una forma especial de programar, ms cercana a como e=presaramos las cosas en la vida real *ue otros tipos de programacin. <on la (BB tenemos *ue aprender a pensar las cosas de una manera distinta, para escribir nuestros programas en t:rminos de objetos, propiedades, m:todos otras cosas *ue veremos rpidamente para aclarar conceptos dar una pe*uea base *ue permita soltarnos un poco con este tipo de programacin. Moti$acin Aurante aos, los programadores se 2an dedicado a construir aplicaciones mu parecidas *ue resolvan una otra vez los mismos problemas. (ara conseguir *ue los esfuerzos de los programadores puedan ser utilizados por otras personas se cre la (BB. !ue es una serie de normas de realizar las cosas de manera *ue otras personas puedan utilizarlas adelantar su trabajo, de manera *ue consigamos *ue el cdigo se pueda reutilizar. -a (BB no es difcil, pero es una manera especial de pensar, a veces subjetiva de *uien la programa, de manera *ue la forma de 2acer las cosas puede ser diferente seg6n el programador. ;un*ue podamos 2acer los programas de formas distintas, no todas ellas son correctas, lo difcil no es programar orientado a objetos sino programar bien. (rogramar bien es importante por*ue as nos podemos aprovec2ar de todas las ventajas de la (BB. Cmo se piensa en objetos (ensar en t:rminos de objetos es mu parecido a cmo lo 2aramos en la vida real. (or ejemplo vamos a pensar en un coc2e para tratar de modelizarlo en un es*uema de (BB. Airamos *ue el coc2e es el elemento principal *ue tiene una serie de caractersticas, como podran ser el color, el modelo o la marca. ;dems tiene una serie de funcionalidades asociadas, como pueden ser ponerse en marc2a, parar o aparcar. (ues en un es*uema (BB el coc2e sera el objeto, las propiedades seran las caractersticas como el color o el modelo los m:todos seran las funcionalidades asociadas como ponerse en marc2a o parar. (or poner otro ejemplo vamos a ver cmo modelizaramos en un es*uema (BB una fraccin, es decir, esa estructura matemtica *ue tiene un numerador un denominador *ue divide al numerador, por ejemplo PG4. -a fraccin ser el objeto tendr dos propiedades, el numerador el denominador. -uego podra tener varios m:todos como simplificarse, sumarse con otra fraccin o n6mero, restarse con otra fraccin, etc. 3stos objetos se podrn utilizar en los programas, por ejemplo en un programa de matemticas 2ars uso de objetos fraccin en un programa *ue gestione un taller de coc2es utilizars objetos coc2e. -os programas Brientados a objetos utilizan muc2os objetos para realizar las acciones *ue se desean realizar ellos mismos tambi:n son objetos. 3s decir, el taller de coc2es ser un objeto *ue utilizar objetos coc2e, 2erramienta, mecnico, recambios, etc. Clases en POO -as clases son declaraciones de objetos, tambi:n se podran definir como abstracciones de objetos. 3sto *uiere decir *ue la definicin de un objeto es la clase. <uando programamos un objeto definimos sus caractersticas funcionalidades en realidad lo *ue estamos 2aciendo es programar una clase. 3n los ejemplos anteriores en realidad 2ablbamos de las clases coc2e o fraccin por*ue slo estuvimos definiendo, aun*ue por encima, sus formas. Propiedades en clases -as propiedades o atributos son las caractersticas de los objetos. <uando definimos una propiedad normalmente especificamos su nombre su tipo. Fos podemos 2acer a la idea de *ue las propiedades son algo as como variables donde almacenamos datos relacionados con los objetos. Mtodos en las clases Son las funcionalidades asociadas a los objetos. <uando estamos programando las clases las llamamos m:todos. -os m:todos son como funciones *ue estn asociadas a un objeto. Objetos en POO -os objetos son ejemplares de una clase cual*uiera. <uando creamos un ejemplar tenemos *ue especificar la clase a partir de la cual se crear. 3sta accin de crear un objeto a partir de una clase se llama instanciar (*ue viene de una mala traduccin de la palabra instace *ue en ingl:s significa ejemplar). (or ejemplo, un objeto de la clase fraccin es por ejemplo PG7. 3l concepto o definicin de fraccin sera la clase, pero cuando a estamos 2ablando de una fraccin en concreto 0GO, MG.555 o cual*uier otra, la llamamos objeto. (ara crear un objeto se tiene *ue escribir una instruccin especial *ue puede ser distinta dependiendo el lenguaje de programacin *ue se emplee, pero ser algo parecido a esto. mi<oc2e ] new <oc2e() <on la palabra new especificamos *ue se tiene *ue crear una instancia de la clase *ue sigue a continuacin. Aentro de los par:ntesis podramos colocar parmetros con los *ue inicializar el objeto de la clase coc2e. Estados en objetos <uando tenemos un objeto sus propiedades toman valores. (or ejemplo, cuando tenemos un coc2e la propiedad color tomar un valor en concreto, como por ejemplo rojo o gris metalizado. 3l valor concreto de una propiedad de un objeto se llama estado. (ara acceder a un estado de un objeto para ver su valor o cambiarlo se utiliza el operador punto. mi<oc2e.color ] rojo 3l objeto es mi<oc2e, luego colocamos el operador punto por 6ltimo el nombre e la propiedad a la *ue deseamos acceder. 3n este ejemplo estamos cambiando el valor del estado de la propiedad del objeto a rojo con una simple asignacin. Mensajes en objetos &n mensaje en un objeto es la accin de efectuar una llamada a un m:todo. (or ejemplo, cuando le decimos a un objeto coc2e *ue se ponga en marc2a estamos pasndole el mensaje [ponte en marc2a\. (ara mandar mensajes a los objetos utilizamos el operador punto, seguido del m:todo *ue deseamos invocar. mi<oc2e.ponerse3n@arc2a() 3n este ejemplo pasamos el mensaje ponerse3n@arc2a(). )a *ue colocar par:ntesis igual *ue cual*uier llamada a una funcin, dentro iran los parmetros. Otras cosas )a muc2o todava *ue conocer de la (BB a *ue slo 2emos 2ec2o referencia a las cosas ms bsicas. #ambi:n e=isten mecanismos como la 2erencia el polimorfismo *ue son unas de las posibilidades ms potentes de la (BB. -a 2erencia sirve para crear objetos *ue incorporen propiedades m:todos de otros objetos. ;s podremos construir unos objetos a partir de otros sin tener *ue reescribirlo todo. 3l polimorfismo sirve para *ue no tengamos *ue preocuparnos sobre lo *ue estamos trabajando, abstraernos para definir un cdigo *ue sea compatible con objetos de varios tipos. Son conceptos avanzados *ue cuesta e=plicar en las lneas de ese informe. Fo 2a *ue olvidar *ue e=isten libros enteros dedicados a la (BB a*u solo pretendemos dar un repaso a algunas cosas para *ue os suenen cuando tengis *ue poneros delante de ellas en los lenguajes de programacin *ue debe conocer un desarrollador del web. Ejemplo concreto de programacin orientada a objetos Clases en PHP ! -as clases en (rogramacin orientada a objetos ((BB) son definiciones de los elementos *ue forman un sistema, en este caso, definiciones de los objetos *ue van a intervenir en nuestros programas. &n objeto se define indicando *u: propiedades funcionalidades tiene. Justamente esas declaraciones son lo *ue es una clase. <uando se 2ace una clase simplemente se especifica *u: propiedades funcionalidades tiene. (or ejemplo, un 2ombre podra tener como propiedades el nombre o la edad como funcionalidades, comer, moverse o estudiar. 3n la clase 2ombre declararamos dos atributosE la edad o el nombre, *ue seran como dos variables. #ambi:n deberamos crear tres m:todos, con los procedimientos a seguir para *ue el 2ombre pueda comer, moverse o estudiar. 3stos m:todos se definen declarando funciones dentro de la clase. 3l cdigo para definir una clase se puede ver a continuacinE class hombre1 var $nombre; var $edad; .unction comer/$comida01 %%aqu el c"di<o del mMtodo 4 .unction moverse/$destino01 %%aqu el c"di<o del mMtodo 4 .unction estudiar/$asi<natura01 %%aqu el c"di<o del mMtodo 4 4 (odr comprobarse *ue este cdigo no difiere en nada del de las versiones anteriores de ()(, *ue a soportaban ciertas caractersticas de la (BB. 3sta situacin cambiar a poco *ue e=ploremos las caractersticas ms avanzadas de ()( 7, *ue implicarn mejoras *ue no estaban presentes en las versiones anteriores Instanciar objetos a partir de clases )emos visto *ue una clase es tan slo una definicin. Si *ueremos trabajar con las clases debemos instanciar objetos, proceso *ue consiste en generar un ejemplar de una clase. (or ejemplo, tenemos la clase 2ombre anterior. <on la clase en si no podemos 2acer nada, pero podemos crear objetos 2ombre a partir de esa clase. <ada objeto 2ombre tendr unas caractersticas propias, como la edad o el nombre. ;dems podr desempear unas funciones como comer o moverse, a2ora bien, cada uno comer o se mover por su cuenta cuando le sea solicitado, sin interferir en principio con lo *ue pueda estar 2aciendo otro 2ombre. ^a *ue estamos, vamos a ver cmo se generaran un par de 2ombres, es decir, cmo se instanciaran un par de objetos de la clase 2ombre. (ara ello utilizamos el operador new. $pepe = neS hombre/0; $juan = neS hombre/0; Conclusin 3s importante darse cuenta de la diferencia entre un objeto una clase. -a clase es una definicin de unas caractersticas funcionalidades, algo abstracto *ue se concreta con la instanciacin de un objeto de dic2a clase. &n objeto a tiene propiedades, con sus valores concretos, se le pueden pasar mensajes (llamar a los m:todos) para *ue 2agan cosas. amos a $er /u es un constructor - para /ue sir$en0 adem1s de un sencillo ejemplo de una clase /ue define un constructor. -os constructores se encargan de resumir las acciones de inicializacin de los objetos. <uando se instancia un objeto, se tienen *ue realizar varios pasos en su inicializacin, por ejemplo dar valores a sus atributos eso es de lo *ue se encarga el constructor. -os constructores pueden recibir unos datos para inicializar los objetos como se desee en cada caso. -a sinta=is para la creacin de constructor vara con respecto a la de ()( P 0, pues debe llamarse con un nombre fijoE WWconstruct(). (Son dos guiones bajos antes de la palabra NconstructN) ; lo largo de los ejemplos de este manual vamos a ir creando un cdigo para gestin de un videoclub. Iamos a empezar definiendo una clase cliente, *ue utilizaremos luego en nuestro programa. class cliente1 var $nombre; var $numero; var $peliculas(alquiladas; .unction ((construct/$nombre-$numero01 $thisO>nombre=$nombre; $thisO>numero=$numero; $thisO>peliculas(alquiladas=arra!/0; 4 .unction dame(numero/01 return $thisO>numero; 4 4 3l constructor en esta clase recibe el nombre n6mero *ue asignar al cliente, *ue introduce luego en sus correspondientes propiedades. ;dems inicializa el atributo pelculasWal*uiladas como un arra, en este caso vaco por*ue todava no tiene ninguna pelcula en su poder. 2ota3 3n programacin orientada a objetos Zt2is 2ace referencia al objeto sobre el *ue se est ejecutando el m:todo. 3n este caso, como se trata de un constructor, Zt2is 2ace referencia al objeto *ue se est construendo. <on Zt2is>Xnombre]Znombre1 estamos asignando al atributo [nombre\ del objeto *ue se est construendo el valor *ue contiene la variable Znombre, *ue se 2a recibido por parmetro. -uego 2emos creado un m:todo mu sencillo para poder utilizar el objeto. Iamos a ver unas acciones simples para ilustrar el proceso de instanciacin utilizacin de los objetos. %%instanciamos un par de objetos cliente $clienteQ = neS cliente/5$epe5- Q0; $clienteR = neS cliente/56oberto5- JUT0; %%mostramos el numero de cada cliente creado echo 5El identi.icador del cliente Q es3 5 2 $clienteQO>dame(numero/0; echo 5El identi.icador del cliente R es3 5 2 $clienteRO>dame(numero/0; 3ste ejemplo obtendra esta salida como resultado de su ejecucinE 3l identificador del cliente . esE . 3l identificador del cliente 4 esE 7S0 E+plicacin de los destructores en PHP! - ejemplos de funcionamiento. -os destructores son funciones *ue se encargan de realizar las tareas *ue se necesita ejecutar cuando un objeto deja de e=istir. <uando un objeto a no est referenciado por ninguna variable, deja de tener sentido *ue est: almacenado en la memoria, por tanto, el objeto se debe destruir para liberar su espacio. 3n el momento de su destruccin se llama a la funcin destructor, *ue puede realizar las tareas *ue el programador estime oportuno realizar. -a creacin del destructor es opcional. Slo debemos crearlo si deseamos 2acer alguna cosa cuando un objeto se elimine de la memoria. 3l destructor es como cual*uier otro m:todo de la clase, aun*ue debe declararse con un nombre fijoE WWdestruct(). 3n el cdigo siguiente vamos a ver un destructor en funcionamiento. ;un*ue la accin *ue realiza al destruirse el objeto no es mu 6til, nos puede servir bien para ver cmo trabaja. class cliente1 var $nombre; var $numero; var $peliculas(alquiladas; .unction ((construct/$nombre-$numero01 $thisO>nombre=$nombre; $thisO>numero=$numero; $thisO>peliculas(alquiladas=arra!/0; 4 .unction ((destruct/01 echo 5<br>destruido3 5 2 $thisO>nombre; 4 .unction dame(numero/01 return $thisO>numero; 4 4 %%instanciamos un par de objetos cliente $clienteQ = neS cliente/5$epe5- Q0; $clienteR = neS cliente/56oberto5- JUT0; %%mostramos el numero de cada cliente creado echo 5El identi.icador del cliente Q es3 5 2 $clienteQO>dame(numero/0; echo 5<br>El identi.icador del cliente R es3 5 2 $clienteRO>dame(numero/0; 3ste cdigo es igual *ue el anterior. Slo se 2a aadido el destructor, *ue imprime un mensaje en pantalla con el nombre del cliente *ue se 2a destruido. #ras su ejecucin obtendramos la siguiente salida. 3l identificador del cliente . esE . 3l identificador del cliente 4 esE 7S0 destruidoE (epe destruidoE ,oberto <omo vemos, antes de acabar el script, se libera el espacio en memoria de los objetos, con lo *ue se ejecuta el destructor aparece el correspondiente mensaje en la pgina. &n objeto puede *uedar sin referencias por lo tanto ser destruido, por muc2as razones. (or ejemplo, el objeto puede ser una variable local de una funcin al finalizarse la ejecucin de esa funcin la variable local dejara de tener validez, con lo *ue debe destruirse. 3l cdigo siguiente ilustra cmo una variable local a cual*uier mbito (por ejemplo, local a una funcin), se destrue cuando ese mbito 2a finalizado. .unction crea(cliente(local/01 $cliente(local = neS cliente/5so! local5- J0; 4 crea(cliente(local/0 -a funcin simplemente crea una variable local *ue contiene la instanciacin de un cliente. <uando la funcin se acaba, la variable local deja de e=istir por lo tanto se llama al destructor definido para ese objeto. 2ota3 #ambi:n podemos des2acernos de un objeto sin necesidad *ue acabe el mbito donde fue creado. (ara ello tenemos la funcin unset() *ue recibe una variable la elimina de la memoria. <uando se pierde una variable *ue contiene un objeto ese objeto deja de tener referencias, se elimina al objeto se llama al destructor. 4on los Public0 Protected - Pri$ate0 /ue pueden conocerse por/ue -a se utili5an en otros lenguajes orientados a objetos. Ieremos en este captulo los nuevos modificadores de acceso a los m:todos atributos de los objetos *ue se 2an incorporado en ()( 7. 3stos modificadores de acceso no son otros *ue los conocidos public, protected private, *ue a disponen otros lenguajes como Java. &no de los principios de la programacin orientada a objetos es la encapsulacin, *ue es un proceso por el *ue se ocultan las caractersticas internas de un objeto a a*uellos elementos *ue no tienen por*ue conocerla. -os modificadores de acceso sirven para indicar los permisos *ue tendrn otros objetos para acceder a sus m:todos propiedades. Modificador public 3s el nivel de acceso ms permisivo. Sirve para indicar *ue el m:todo o atributo de la clase es p6blico. 3n este caso se puede acceder a ese atributo, para visualizarlo o editarlo, por cual*uier otro elemento de nuestro programa. 3s el modificador *ue se aplica si no se indica otra cosa. Ieamos un ejemplo de clase donde 2emos declarado como public sus elementos, un m:todo una propiedad. Se trata de la clase NdadoN, *ue tiene un atributo con su puntuacin un m:todo para tirar el dado obtener una nueva puntuacin aleatoria. class dado1 public $puntos; .unction ((construct/01 srand//double0microtime/0IQYYYYYY0; 4 public .unction tirate/01 $thisO>puntos=$randval = rand/Q-U0; 4 4 $mi(dado = neS dado/0; .or /$i=Y;$i<LY;$iKK01 $mi(dadoO>tirate/0; echo 5<br>Han salido 5 2 $mi(dadoO>puntos 2 5 puntos5; 4 Iemos la declaracin de la clase dado luego unas lneas de cdigo para ilustrar su funcionamiento. 3n el ejemplo se realiza un bucle P5 veces, en las cuales se tira el dado se muestra la puntuacin *ue se 2a obtenido. <omo el atributo Zpuntos el m:todo tirate() son p6blicos, se puede acceder a ellos desde fuera del objeto, o lo *ue es lo mismo, desde fuera del cdigo de la clase. Modificador pri$ate 3s el nivel de acceso ms restrictivo. Sirve para indicar *ue esa variable slo se va a poder acceder desde el propio objeto, nunca desde fuera. Si intentamos acceder a un m:todo o atributo declarado private desde fuera del propio objeto, obtendremos un mensaje de error indicando *ue no es posible a ese elemento. Si en el ejemplo anterior 2ubi:ramos declarado private el m:todo la propiedad de la clase dado, 2ubi:ramos recibido un mensaje de error. ;*u tenemos otra posible implementacin de la clase dado, declarando como private el atributo puntos el m:todo tirate(). class dado1 private $puntos; .unction ((construct/01 srand//double0microtime/0IQYYYYYY0; 4 private .unction tirate/01 $thisO>puntos=$randval = rand/Q-U0; 4 public .unction dame(nueva(puntuacion/01 $thisO>tirate/0; return $thisO>puntos; 4 4 $mi(dado = neS dado/0; .or /$i=Y;$i<LY;$iKK01 echo 5<br>Han salido 5 2 $mi(dadoO>dame(nueva(puntuacion/0 2 5 puntos5; 4 )emos tenido *ue crear un nuevo m:todo p6blico para operar con el dado, por*ue si es todo privado no 2a manera de 2acer uso de :l. 3l mencionado m:todo es dameWnuevaWpuntuacin(), *ue realiza la accin de tirar el dado devolver el valor *ue 2a salido. Modificador protected 3ste indica un nivel de acceso medio un poco ms especial *ue los anteriores. Sirve para *ue el m:todo o atributo sea p6blico dentro del cdigo de la propia clase de cual*uier clase *ue 2erede de a*uella donde est el m:todo o propiedad protected. 3s privado no accesible desde cual*uier otra parte. 3s decir, un elemento protected es p6blico dentro de la propia clase en sus 2eredadas. @s adelante e=plicaremos la 2erencia podremos ofrecer ejemplos con el modificador protected. Conclusin @uc2as veces el propio desarrollador es el *ue fija su criterio a la 2ora de aplicar los distintos modificadores de acceso a atributos m:todos. (oca proteccin implica *ue los objetos pierdan su encapsulacin con ello una de las ventajas de la (BB. &na proteccin maor puede 2acer ms laborioso de generar el cdigo del programa, pero en general es aconsejable. E+plicamos la &erencia en PHP !0 un proceso por el cual los objetos pueden &eredar las caractersticas de otros0 de modo /ue se pueden &acer objetos especiali5ados0 basados en otros m1s generales. -a 2erencia es uno de los mecanismos fundamentales de la programacin orientada a objetos. (or medio de la 2erencia, se pueden definir clases a partir de la declaracin de otras clases. -as clases *ue 2eredan incluen tanto los m:todos como las propiedades de la clase a partir de la *ue estn definidos. (or ejemplo, pensemos en la clase Nve2culoN. 3sta clase general puede incluir las caractersticas generales de todos los ve2culos (atributos de la clase), como la matrcula, ao de fabricacin potencia. ;dems, incluir algunas funcionalidades (m:todos de la clase) como podran ser, arrancar() o moverse(). ;2ora bien, en la prctica e=isten varios tipos de ve2culos, como los coc2es, los autobuses los camiones. #odos ellos tienen unas caractersticas comunes, *ue 2an sido definidas en la clase ve2culo. ;dems, tendrn una serie de caractersticas propias del tipo de ve2culo, *ue, en principio, no tienen otros tipos de ve2culos. (or ejemplo, los camiones pueden tener una carga m=ima permitida o los autobuses un n6mero de plazas disponibles. Ael mismo modo, las clases ms especficas pueden tener unas funcionalidades propias, como los camiones cargar() descargar(), o los autobuses aceptarWpasajeros() o venderWbillete(). -o normal en sistemas de 2erencia es *ue las clases *ue 2eredan de otras incluan nuevas caractersticas funcionalidades, aparte de los atributos m:todos 2eredados. (ero esto no es imprescindible, de modo *ue se pueden crear objetos *ue 2ereden de otros no incluan nada nuevo. 4inta+is de &erencia en PHP ! -a programacin orientada a objetos nos ofrece una serie de mecanismos para definir este tipo de estructuras, de modo *ue se puedan crear jerar*uas de objetos *ue 2eredan unos de otros. Ieremos a2ora cmo definir estas estructuras de 2erencia en ()( 7. (ara ello, continuando con nuestro ejemplo de video club, vamos a crear los distintos tipos de elementos *ue se ofrecen en al*uiler. <omo todo el mundo conoce, los video clubs ofrecen distintos tipos de elementos para al*uiler, como pueden ser las pelculas (cintas de vdeo o AIA) los juegos. <ada elemento tiene unas caractersticas propias algunas comunes. )emos llamado NsoporteN a la clase general, *ue inclue las caractersticas comunes para todos los tipos de elementos en al*uiler. -uego 2emos creado tres tipos de soportes distintos, *ue 2eredan de la clase soporte, pero *ue incluen algunas caractersticas funcionalidades nuevas. 3stos tipos de soporte sern NcintaWvideoN, NdvdN NjuegoN. 3l es*uema de 2erencia *ue vamos a realizar en este ejemplo se puede ver en la siguiente imagen. 3mpezamos por la clase soporte. Su cdigo ser el siguienteE class soporte1 public $titulo; protected $numero; private $precio; .unction ((construct/$tit-$num-$precio01 $thisO>titulo = $tit; $thisO>numero = $num; $thisO>precio = $precio; 4 public .unction dame(precio(sin(iva/01 return $thisO>precio; 4 public .unction dame(precio(con(iva/01 return $thisO>precio I Q2QU; 4 public .unction dame(numero(identi.icacion/01 return $thisO>numero; 4 public .unction imprime(caracteristicas/01 echo $thisO>titulo; echo 5<br>5 2 $thisO>precio 2 5 /@7= no incluido05; 4 4 -os atributos *ue 2emos definido son, ttulo, numero (un identificador del soporte) precio. )emos aplicado a cada uno un modificador de acceso distinto, para poder practicar los distintos tipos de acceso. )emos definido un constructor, *ue recibe los valores para la inicializacin del objeto. &n m:todo dameWprecioWsinWiva(), *ue devuelve el precio del soporte, sin aplicarle el 'I;. Btro m:todo dameWprecioWconWiva(), *ue devuelve el precio una vez aplicado el .SY de 'I;. 3l m:todo dameWnumeroWidentificacion(), *ue devuelve el n6mero de identificador imprimeWcaracteristicas(), *ue muestra en la pgina las caractersticas de este soporte. 2ota3 <omo se 2a definido como private el atributo precio, este atributo slo se podr acceder dentro del cdigo de la clase, es decir, en la propia definicin del objeto. Si *ueremos acceder al precio desde fuera de la clase (algo mu normal si tenemos en cuenta *ue vamos a necesitar el precio de un soporte desde otras partes de la aplicacin) ser necesario crear un m:todo *ue nos devuelva el valor del precio. 3ste m:todo debera definirse como public, para *ue se pueda acceder desde cual*uier sitio *ue se necesite. 3n todos los m:todos se 2ace uso de la variable Zt2is. 3sta variable no es ms *ue una referencia al objeto sobre el *ue se est ejecutando el m:todo. 3n programacin orientada a objetos, para ejecutar cual*uiera de estos m:todos, primero tenemos *ue 2aber creado un objeto a partir de una clase. -uego podremos llamar los m:todos de un objeto. 3sto se 2ace con ZmiWobjeto>XmetodoWaWllamar(). Aentro de m:todo, cuando se utiliza la variable Zt2is, se est 2aciendo referencia al objeto sobre el *ue se 2a llamado al m:todo, en este caso, el objeto ZmiWobjeto. <on Zt2is>Xtitulo estamos 2aciendo referencia al atributo NtituloN *ue tiene el objeto ZmiWobjeto. Si *ueremos probar la clase soporte, para confirmar *ue se ejecuta correctamente *ue ofrece resultados co2erentes, podemos utilizar un cdigo como el siguiente. $soporteQ = neS soporte/58os @ntocables5-RR-L0; echo 5<b>5 2 $soporteQO>titulo 2 5<%b>5; echo 5<br>$recio3 5 2 $soporteQO>dame(precio(sin(iva/0 2 5 euros5; echo 5<br>$recio @7= incluido3 5 2 $soporteQO>dame(precio(con(iva/0 2 5 euros5; 3n este caso 2emos creado una instancia de la clase soporte, en un objeto *ue 2emos llamado Zsoporte.. -uego imprimimos su atributo titulo (como el ttulo 2a sido definido como public, podemos acceder a :l desde fuera del cdigo de la clase. -uego se llaman a los m:todos dameWprecioWsinWiva() dameWprecioWconWiva() para el objeto creado. Fos dara como resultado estoE -os 'ntocables (recioE P euros (recio 'I; incluidoE P.0M euros 6os atributos o propiedades de los objetos pueden ser de cual/uier tipo0 incluso pueden ser otros objetos. -as caractersticas de los objetos, *ue se almacenan por medio de los llamados atributos o propiedades, pueden ser de diversa naturaleza. -a clase 2ombre puede tener distintos tipos de atributos, como la edad (num:rico), el nombre propio (tipo cadena de caracteres), color de piel (*ue puede ser un tipo cadena de caracteres o tipo enumerado, *ue es una especie de variable *ue slo puede tomar unos pocos valores posibles). #ambi:n puede tener una estatura o un peso (*ue podran ser de tipo float o n6mero en coma flotante). 3n general, podemos utilizar cual*uier tipo para los atributos de los objetos, incluso podemos utilizar otros objetos. (or ejemplo, podramos definir como atributo de la clase 2ombre sus manos. Aada la complejidad de las manos, estas podran definirse como otro objeto. (or ejemplo, las manos tendran como caractersticas la longitud de los dedos, un coeficiente de elasticidad. <omo funcionalidades o m:todos, podramos definir agarrar algo, soltarlo, pegar una bofetada, o cortarse las uas. ;s pues, uno de los atributos de la clase 2ombre podra ser un nuevo objeto, con su propias caractersticas funcionalidades. -a complejidad de las manos no le importa al desarrollador de la clase 2ombre, por el principio de encapsulacin, dado *ue este conoce sus propiedades (o a*uellas declaradas como public) los m:todos (tambi:n los *ue se 2aan decidido declarar como p6blicos) no necesita preocuparse sobre cmo se 2an codificado. Clase cliente del $ideoclub (ara continuar el ejemplo del videoclub, 2emos creado la clase cliente *ue vamos a e=plicar a continuacin. 3n los clientes 2emos definido como atributo, entre otros, las pelculas o juegos al*uilados. 2ota3<omo vemos, los objetos pueden tener algunos atributos tambi:n de tipo objeto. 3n ese caso pueden 2aber distintos tipos de relaciones entre objetos. (or ejemplo, por pertenencia, como en el caso de la clase 2ombre sus manos, pues a un 2ombre le pertenecen sus manos. #ambi:n se pueden relacionar los objetos por asociacin, como es el caso de los clientes las pelculas *ue al*uilan, pues en ese caso un cliente no tiene una pelcula propiamente dic2a, sino *ue se asocia con una pelcula momentneamente. -a clase cliente *ue 2emos creado tiene cierta complejidad, esperamos *ue no sea demasiada para *ue se pueda entender fcilmente. -a e=plicaremos poco a poco para facilitar las cosas. Atributos de la clase cliente )emos definido una serie de atributos para trabajar con los clientes. #enemos los siguientesE public $nombre; private $numero; private $soportes(alquilados; private $num(soportes(alquilados; private $ma'(alquiler(concurrente; <omo se puede ver, se 2an definido casi todos los atributos como private, con lo *ue slo se podrn acceder dentro del cdigo de la clase. 3l atributo nombre, *ue guarda el nombre propio del cliente, es el 6nico *ue 2emos dejado como p6blico *ue por tanto se podr referenciar desde cual*uier parte del programa, incluso desde otras clases. 3l atributo numero se utiliza para guardar el identificador num:rico del cliente. (or su parte, soportes al*uilados nos servir para asociar al cliente las pelculas o juegos cuando este las al*uile. 3l atributo numWsoportesWal*uilados almacenar el n6mero de pelculas o juegos *ue un cliente tiene al*uilados en todo momento. (or 6ltimo, ma=Wal*uilerWconcurrente indica el n6mero m=imo de soportes *ue puede tener al*uilados un cliente en un mismo instante, no permiti:ndose al*uilar a ese cliente, a la vez, ms *ue ese n6mero de pelculas o juegos. 3l 6nico atributo sobre el *ue merece la pena llamar la atencin es soportesWal*uilados, *ue contendr un arra de soportes. 3n cada casilla del arra se introducirn las pelculas o juegos *ue un cliente vaa al*uilando, para asociar esos soportes al cliente *ue las al*uil. 3l arra contendr tantas casillas como el ma=Wal*uilerWconcurrente, puesto *ue no tiene sentido asignar maor espacio al arra del *ue se va a utilizar. (ara facilitar las cosas, cuando un cliente no tiene al*uilado nada, tendr el valor null en las casillas del arra. 2ota3,ecordemos *ue los soportes fueron definidos en captulos anteriores de este manual de ()( 7 , mediante un mecanismo de 2erencia. Soporte era una clase de la *ue 2eredaban las pelculas en AIA, las cintas de vdeo los juegos. Constructor de la clase cliente .unction ((construct/$nombre-$numero-$ma'(alquiler(concurrente=L01 $thisO>nombre=$nombre; $thisO>numero=$numero; $thisO>soportes(alquilados=arra!/0; $thisO>num(soportes(alquilados=Y; $thisO>ma'(alquiler(concurrente = $ma'(alquiler(concurrente; %%iniciali>o las casillas del arra! de alquiler a 5null5 %%un valor 5null5 quiere decir que el no ha! alquiler en esa casilla .or /$i=Y;$i<$ma'(alquiler(concurrente;$iKK01 $thisO>soportes(alquilados+$i,=null; 4 4 3l constructor de la clase cliente recibe los datos para inicializar el objeto. 3stos son Znombre, Znumero Zma=Wal*uilerWconcurrente. Si nos fijamos, se 2a definido por defecto a P el n6mero m=imo de al*uileres *ue puede tener un cliente, de modo *ue, en el caso de *ue la llamada al constructor no enve el parmetro Zma=Wal*uilerWconcurrente se asumir el valor P. 3l atributo soportesWal*uilados, como 2abamos adelantado, ser un arra *ue tendr tantas casillas como el m=imo de al*uileres concurrentes. 3n las 6ltimas lneas se inicializan a null el contenido de las casillas del arra