Sie sind auf Seite 1von 22

Manual de Introduccin a PHP5

1. Introduccin a PHP5.
A continuacin se da un vistazo a la ltima versin de PHP lanzada al mercado: PHP5. Una esperada evolucin del, tal vez, ms popular de los lenguajes de programacin de pginas y aplicaciones e! del lado del servidor. "ste manual no va a tratar de e#plicar desde cero la programacin de aplicaciones del lado del servidor con PHP, por lo $ue para iniciarse en la programacin e!, de!er recurrir a manuales ms !sicos. %i usted no sa!e lo $ue son las pginas dinmicas de servidor le recomendamos $ue comience aclarando esos conceptos. Introduccin a PHP 5 &on las primeras ' versiones de PHP, PHP ( y PHP ), se *a!+a conseguido una plata,orma potente y esta!le para la programacin de pginas del lado del servidor. "stas versiones *an servido de muc*a ayuda para la comunidad de desarrolladores, *aciendo posi!le $ue PHP sea el lenguaje ms utilizado en la e! para la realizacin de pginas avanzadas. %in em!argo, todav+a e#ist+an puntos negros en el desarrollo PHP $ue se *an tratado de solucionar con la versin 5, aspectos $ue se ec*aron de menos en la versin ), casi desde el d+a de su lanzamiento. -os re,erimos principalmente a la programacin orientada a o!jetos .P//0 $ue, a pesar de $ue esta!a soportada a partir de PHP(, slo implementa!a una parte muy pe$ue1a de las caracter+sticas de este tipo de programacin.
Nota: la orientacin a o!jetos es una manera de programar $ue trata de modelar los procesos de programacin de una manera cercana a la realidad: tratando a cada componente de un programa como un o!jeto con sus caracter+sticas y ,uncionalidades.

"l principal o!jetivo de PHP5 *a sido mejorar los mecanismos de P// para solucionar las carencias de las anteriores versiones. Un paso necesario para conseguir $ue PHP sea un lenguaje apto para todo tipo de aplicaciones y entornos, incluso los ms e#igentes.

2. Instalacin de PHP5 con WAMP5.


"#iste una manera de comenzar a utilizar PHP5 en 2indo s sin tener $ue su,rir las complicaciones t+picas de la instalacin de los servidores necesarios para programar en PHP. %e trata de instalar un pa$uete llamado 2A3P, $ue permite instalar y con,igurar en un solo proceso el servidor Apac*e, la !ase de datos 3y%45 y el mdulo de programacin en PHP versin 5. 2A3P es un sistema indicado para los usuarios $ue no tienen instalado en el sistema ninguno de los programas necesarios para programar en PHP .Apac*e, PHP y 3y%450, ya $ue realiza una instalacin completa y desde cero. Pero tam!i6n pueden utilizar este programa los usuarios $ue disponen de Apac*e, PHP y7o 3y%45 en su sistema. "n cuyo caso, simplemente se realizar otra copia de las aplicaciones en un directorio distinto, $ue en principio, no tiene por $u6 inter,erir con las otras instalaciones alojadas en nuestro e$uipo.

Centro de Tecnologa de la Informacin 2005. Universidad de Tarapac .

Manual de Introduccin a PHP5

Programas que contiene WAMP5 "l so,t are $ue se instala con 2A3P5 contiene los siguientes servidores y programas: Apac*e 8.(.(8. "l servidor de pginas e! ms e#tendido del mercado. Aun$ue la ltima versin de este servidor es Apac*e ', se instala una versin anterior $ue resulta ms esta!le. "#iste un Add9on $ue permite sustituir la versin 8.(.(8 de Apac*e por la ltima versin. /!s: Apac*e ' no ,unciona !ien en 2indo s :#. PHP5. "l motor renovado del lenguaje. 3y%45. 5a !ase de datos ms e#tendida para utilizar con PHP. PHPmyadmin. Un so,t are $ue permite administrar la !ase de datos 3y%$l a trav6s de una inter,az e!. %45itemanager. Un sistema para administrar una !ase de datos a partir de sentencias %45.

Instalacin de WAMP 5a instalacin se realiza a trav6s de un ejecuta!le 2indo s donde se pueden introducir muy pocas con,iguraciones, apenas el directorio donde deseamos $ue se instalen los programas. ;espu6s del proceso de instalacin se *a!rn creado un par de servicios con el servidor e! y el de !ases de datos: %ervicio %ervicio ampapac*e: <elacionado con el servidor Apac*e. ampmys$l: <elacionado con la !ase de datos 3y%45.

Adems, dentro del directorio donde *ayamos instalado 2A3P5 se *a!r creado una carpeta llamada = =, $ue corresponde con el directorio de pu!licacin, es decir, el lugar donde se de!en colocar las pginas e!. ;urante la instalacin tam!i6n de!emos decidir si deseamos $ue 2A3P5 se inicie automticamente al arrancar el e$uipo o si deseamos $ue su puesta en marc*a se realice manualmente. Puesta en marcha de los servidores &uando instalamos 2A3P5 se crea un grupo de programas llamado 2amp%erver, donde podremos encontrar una opcin $ue pone =%tart 2ampserver=, $ue ser necesario ejecutar si no *emos seleccionado $ue el servidor se inicie automticamente. Una vez arrancado 2amp%erver dispondremos de un icono en la !arra de tareas con una ,orma similar a la de un marcador de velocidad. %i pulsamos so!re ese icono se a!rir un men con opciones variadas para gestionar los servicios relacionados con el pa$uete. 5a imagen de a!ajo muestra ese men. Podemos pro!ar si los servicios estn corriendo per,ectamente accediendo a la pgina de inicio del servidor, escri!iendo en la !arra de direcciones de nuestro navegador algo como *ttp:77local*ost7. "ntonces nos de!er+a de aparecer una pgina con varios enlaces a las distintas *erramientas instaladas con 2A3P5, adems de algunas pginas de prue!a de PHP.

Centro de Tecnologa de la Informacin 2005. Universidad de Tarapac .

Manual de Introduccin a PHP5

igura 1: >nter,az de 2A3P

Add!ons "#isten varios a1adidos $ue se pueden instalar con 2A3P, para ampliar las posi!ilidades del pa$uete. Por ejemplo, podemos instalar un add9on para permitir $ue 2A3P tra!aje con PHP5 o !ien PHP), creando una nueva opcin en el men de 2A3P5 $ue permite cam!iar de una versin a otra de PHP. Hay otros a1adidos disponi!les: >nstalar Active%tate Perl en nuestro sistema, para permitir la ejecucin de &?>. Actualizar a la versin de Apac*e '. >nstalar @end /ptimizer, para mejorar el comportamiento en tiempo de ejecucin de PHP.

Por ltimo, el add9on $ue instala 2e!alizer, un sistema para o!tener estad+sticas de uso del servidor e!. %e puede o!tener ms in,ormacin de este sistema y opciones para la descarga en la pgina *ttp:77 .en. ampserver.com7

Centro de Tecnologa de la Informacin 2005. Universidad de Tarapac .

Manual de Introduccin a PHP5

"

3. Modelo de Orientacin a Objetos de PHP3 y PHP4.


Para entender los cam#ios de PHP5 es interesante conocer $rimero cmo era el modelo de o#%etos de las versiones anteriores& 5a versin ( de PHP ya soporta!a la programacin orientada a o!jetos .P//0, aun$ue es verdad $ue la mayor+a de las caracter+sticas de este tipo de programacin no esta!an implementadas todav+a. "n concreto, con PHP( pod+amos crear clases e instanciar o!jetos. 5as clases permit+an agrupar tanto m6todos como propiedades o atri!utos, pero la cosa se $ueda!a a*+. "n PHP), se reescri!i el motor de PHP para *acerlo muc*o ms rpido y esta!le, pero la P//, $ue *a!+a introducido la anterior versin del lenguaje, no se lleg a modi,icar prcticamente. Aun as+, durante la vigencia de PHP ), la programacin orientada a o!jetos ,ue utilizada *a!itualmente, a menudo en aplicaciones de gran tama1o. "ntornos donde se puso de mani,iesto la ,alta de potencia de la P// en PHP ) y la necesidad de mejorarla en una nueva versin. "l mayor pro!lema de la P// en las versiones ( y ) de PHP se !asa!a en $ue, cada vez $ue se asigna!a una varia!le $ue conten+a un o!jeto a otra varia!le, o se pasa!a un o!jeto por parmetro en una ,uncin, se realiza!a una copia .un clon0 de ese o!jeto y $ueda!a a disposicin del programa en la nueva varia!le o parmetro.
Apepe B ne persona.=pepe=0C Apepe' B ApepeC

"n un cdigo como el anterior, se tiene un o!jeto persona alojado en la varia!le Apepe y en la segunda l+nea de cdigo, se crea un clon de Apepe y se asigna a la varia!le Apepe'. "n este caso y siempre siguiendo el anterior modo de tra!ajo de PHP, aun$ue Apepe y Apepe' contienen un o!jeto id6ntico, no se trata del mismo o!jeto sino de una copia. Dodo esto implica $ue el espacio en memoria para guardar los dos o!jetos es el do!le $ue si ,uera un mismo o!jeto con dos nom!res distintos. "sta situacin ocurr+a por$ue los o!jetos eran tratados del mismo modo $ue las varia!les normales, $ue se pasan por valor en las ,unciones y en caso de asignarse, se realiza una copia de la varia!le antes de asignarse al nuevo espacio. '%em$lo del modo de tra#a%o con o#%etos de PHP 3 ( "& Eamos a realizar un ejemplo para ilustrar el modo de tra!ajo de PHP ( y ) con los o!jetos. "n este ejemplo podr $uedar patente el proceso de clonacin de los o!jetos al ser pasados en una ,uncin o al asignarse a otra varia!le. Primero veamos una declaracin de un o!jeto muy simple. %e trata de una =caja= $ue tiene un atri!uto $ue es el contenido y dos m6todos, uno para introducir nuevos contenidos en la caja y otro para mostrar el contenido actual de la caja.
class &ajaF var AcontenidoC ,unction introduce.Acosa0F At*is9Gcontenido B AcosaC H ,unction muestraIcontenido.0F ec*o At*is9GcontenidoC H Centro de Tecnologa de la Informacin 2005. Universidad de Tarapac .

Manual de Introduccin a PHP5

A*ora vamos a ver unas pocas l+neas de cdigo $ue *acen uso de la clase &aja para ilustrar el modo de tra!ajo de los o!jetos en PHP ). Eamos a instanciar el o!jeto, luego lo asignamos a otra varia!le, con lo $ue se crear un clon de ese o!jeto, continuamos modi,icando el clon y veremos $ue pasa.
include J&aja.p*pKC Amicaja B Amicaja9Gintroduce.=algo=0C Amicaja9GmuestraIcontenido.0C ec*o AsegundaIcaja AsegundaIcaja9Gintroduce.=contenido AsegundaIcaja9GmuestraIcontenido.0C ec*o Amicaja9GmuestraIcontenido.0C B en ne &aja.0C

=L!rG=C AmicajaC segunda

caja=0C

=L!rG=C

"n la primera l+nea de cdigo se instancia la caja y se aloja el o!jeto en la varia!le Amicaja. "n la segunda l+nea se introduce el string =algo= en el contenido de la caja. 5uego se muestra el contenido, con lo $ue saldr el string =algo= en la pgina e!. "n el segundo !lo$ue de cdigo se asigna el o!jeto Amicaja a la varia!le AsegundaIcaja, con lo $ue se crea el mencionado clon del o!jeto Amicaja y se asigna a la nueva varia!le. 5uego se introduce un nuevo contenido a la instancia alojada en la varia!le AsegundaIcaja. Atencin a$u+, por$ue se *a modi,icado el clon alojado en la varia!le AsegundaIcaja, dejando inaltera!le el o!jeto original Amicaja. Para compro!arlo, se muestra el contenido del o!jeto AsegundaIcaja, con lo $ue aparece en la pgina e! el string =contenido en segunda caja=. Dam!i6n se muestra el contenido de Amicaja, $ue no se *a modi,icado a pesar de actualizar el contenido de su clon, con lo $ue se muestra el string =algo=. "spero $ue no sea demasiado di,+cil de entender. Pod6is *acer la prue!a por vosotros mismos para comprender !ien el ejercicio. ;e todos modos, vamos a *acer otro ejemplo en el $ue se utiliza la clase &aja, $ue esperamos sirva para aclarar mejor el tra!ajo con o!jetos en PHP ( y ).
include J&aja.p*pKC Amicaja B Amicaja9Gintroduce.=algo=0C Amicaja9GmuestraIcontenido.0C ec*o ,unction AcajaIvaciar9Gintroduce.=polvo=0C H vaciaIcaja.Amicaja0C Amicaja9GmuestraIcontenido.0C ne &aja.0C

=L!rG=C vaciaIcaja.AcajaIvaciar0F

"n este ejemplo *emos creado una ,uncin $ue reci!e por parmetro un o!jeto de la clase caja. &omo los parmetros en las ,unciones se reci!en por valor en lugar de re,erencia, cuando se pasa el parmetro del o!jeto caja, en el ,ondo lo $ue se est
Centro de Tecnologa de la Informacin 2005. Universidad de Tarapac .

Manual de Introduccin a PHP5

realizando es una copia de ese o!jeto, de modo $ue dentro de la ,uncin se tra!aja con un clon del o!jeto, en lugar del o!jeto mismo. "n el cdigo se instancia el o!jeto caja y se introduce =algo= en su contenido. 5uego, se declara una ,uncin $ue reci!e el o!jeto y modi,ica su contenido, introduciendo el string =polvo= en el contenido de la caja. "n las siguientes l+neas de cdigo, se llama a la ,uncin declarada anteriormente, pasando por parmetro el o!jeto Amicaja. ;entro de la ,uncin, como dec+a, se modi,ica el contenido de la caja, aun$ue realmente se est modi,icando el contenido de un clon. Por ltimo, se muestra el contenido del o!jeto Amicaja. "n este caso aparece =algo=, a pesar de $ue en la ,uncin ese =algo= se modi,ic por =polvo=. A pesar de poder parecer pesado, vuelvo a repetir $ue en la ,uncin se modi,ic un clon del o!jeto y no el o!jeto original. 5os comportamientos descritos anteriormente no son muy *a!ituales en otros lenguajes de programacin orientada a o!jetos, como Mava, donde el o!jeto no se duplica cada vez $ue se realiza una asignacin o paso por parmetro. Para evitar el comportamiento $ue *emos descrito, PHP dispone de la opcin de paso de parmetros por re,erencia, $ue se realiza con el carcter =N=. Por ejemplo, para asignar el propio o!jeto y no un clon podr+amos *a!er utilizado este cdigo:
AsegundaIcaja B NAmicajaC

Para reci!ir un parmetro por re,erencia en lugar de por valor en una ,uncin utilizar+amos esta declaracin de ,uncin:
,unction vaciaIcaja.NAcajaIvaciar0F

5a posi!ilidad de utilizar el carcter =N= para ,orzar un paso por re,erencia no deja de ser un pro!lema, puesto $ue nos o!liga a utilizar ese mecanismo en mltiples lugares y es muy ,cil olvidarse del =N= en algn sitio, con lo $ue nuestro programa ya no realizar los resultados esperados. 3uc*os programadores *an gastado *oras en encontrar el pro!lema y en cual$uier caso, es una molestia tener $ue estar pendientes de incluir constantemente el signo =N= en el cdigo para *acer $ue ,uncione como ellos desean.

Centro de Tecnologa de la Informacin 2005. Universidad de Tarapac .

Manual de Introduccin a PHP5

4. Modelo de Orientacin a Objetos en PHP5


"n el cap+tulo anterior comentamos las carencias del modelo de orientacin a o!jetos en PHP ( y ), $ue a,ortunadamente *an $uedado solventadas en la versin PHP 5. &omo dec+amos, uno de los pro!lemas ms !sicos de las versiones anteriores de PHP era la clonacin de o!jetos, $ue se realiza!a al asignar un o!jeto a otra varia!le o al pasar un o!jeto por parmetro en una ,uncin. Para solventar este pro!lema PHP5 *ace uso de los manejadores de o!jetos ./!ject *andles0, $ue son una especie de punteros $ue apuntan *acia los espacios en memoria donde residen los o!jetos. &uando se asigna un manejador de o!jetos o se pasa como parmetro en una ,uncin, se duplica el propio o!ject *andle y no el o!jeto en s+.
Nota: Dam!i6n se puede realizar una clonacin de un o!jeto, para o!tener una copia e#acta, pero $ue no es el propio o!jeto. Para ello utilizamos una nueva instruccin llamada =clone=, $ue veremos ms adelante.

Algunas caracter+sticas del tra#a%o con P,, en PHP 5 Eeamos a continuacin una pe$ue1a lista de las nuevas caracter+sticas de la programacin orientada a o!jetos .P//0 en PHP5. -o vamos a descri!ir e#*austivamente cada caracter+stica. Oa lo *aremos ms adelante en este mismo manual. 1&! Nom#res -i%os $ara los constructores ( destructores "n PHP 5 *ay $ue utilizar unos nom!res prede,inidos para los m6todos constructores y destructores .5os $ue se encargan de resumir las tareas de inicializacin y destruccin de los o!jetos. A*ora se *an de llamar IIconstruct.0 y IIdestruct.0. 2&! Acceso $u#lic. $rivate ( $rotected a $ro$iedades ( m/todos A partir de a*ora podemos utilizar los modi,icadores de acceso *a!ituales de la P//. "stos modi,icadores sirven para de,inir $u6 m6todos y propiedades de las clases son accesi!les desde cada entorno. 3&! Posi#ilidad de uso de inter-aces 5as inter,aces se utilizan en la P// para de,inir un conjunto de m6todos $ue implementa una clase. Una clase puede implementar varias inter,aces o conjuntos de m6todos. "n la prctica, el uso de inter,aces es utilizado muy a menudo para suplir la ,alta de *erencia mltiple de lenguajes como PHP o Mava. 5o e#plicaremos con detalle ms adelante. "&! M/todos ( clases -inal "n PHP 5 se puede indicar $ue un m6todo es =,inal=. &on ello no se permite so!rescri!ir ese m6todo, en una nueva clase $ue lo *erede. %i la clase es =,inal=, lo $ue se indica es $ue esa clase no permite ser *eredada por otra clase. 5&! ,$erador instanceo%e utiliza para sa!er si un o!jeto es una instancia de una clase determinada. )&! Atri#utos ( m/todos static "n PHP5 podemos *acer uso de atri!utos y m6todos =static=. %on las propiedades y ,uncionalidades a las $ue se puede acceder a partir del nom!re de clase, sin necesidad de *a!er instanciado un o!jeto de dic*a clase.
Centro de Tecnologa de la Informacin 2005. Universidad de Tarapac .

Manual de Introduccin a PHP5

*&! 1lases ( m/todos a#stractos Dam!i6n es posi!le crear clases y m6todos a!stractos. 5as clases a!stractas no se pueden instanciar, se suelen utilizar para *eredarlas desde otras clases $ue no tienen por$ue ser a!stractas. 5os m6todos a!stractos no se pueden llamar, se utilizan ms !ien para ser *eredados por otras clases, donde no tienen por$ue ser declarados a!stractos. 0&! 1onstantes de clase %e pueden de,inir constantes dentro de la clase. 5uego se pueden acceder dic*as constantes a trav6s de la propia clase. 2&! unciones que es$eci-ican la clase que reci#en $or $ar3metro A*ora se pueden de,inir ,unciones y declarar $ue de!en reci!ir un tipo espec+,ico de o!jeto. "n caso $ue el o!jeto no sea de la clase correcta, se produce un error. 14&! uncin 55autoload67 "s *a!itual $ue los desarrolladores escri!an un arc*ivo por cada clase $ue realizan, como t6cnica para organizar el cdigo de las aplicaciones. Por esa razn, a veces resulta tedioso realizar los incluyes de cada uno de los cdigos de las clases $ue se utilizana en un script. 5a ,uncin IIautoload.0 sirve para intentar incluir el cdigo de una clase $ue se necesite, y $ue no *aya sido declarada todav+a en el cdigo $ue se est ejecutando. 11&! 1lonado de o#%etos %i se desea, se puede realizar un o!jeto a partir de la copia e#acta de otro o!jeto. Para ello se utiliza la instruccin =clone=. Dam!i6n se puede de,inir el m6todo IIclone.0 para realizar tareas asociadas con la clonacin de un o!jeto.

5. Clases en PHP5
5as clases en Programacin orientada a o!jetos .P//0 son de,iniciones de los elementos $ue ,orman un sistema, en este caso, de,iniciones de los o!jetos $ue van a intervenir en nuestros programas. Un o!jeto se de,ine indicando $u6 propiedades y ,uncionalidades tiene. Mustamente esas declaraciones son lo $ue es una clase. &uando se *ace una clase simplemente se especi,ica $u6 propiedades y ,uncionalidades tiene. Por ejemplo, un *om!re podr+a tener como propiedades el nom!re o la edad y como ,uncionalidades, comer, moverse o estudiar. "n la clase *om!re declarar+amos dos atri!utos: la edad o el nom!re, $ue ser+an como dos varia!les. Dam!i6n de!er+amos crear tres m6todos, con los procedimientos a seguir para $ue el *om!re pueda comer, moverse o estudiar. "stos m6todos se de,inen declarando ,unciones dentro de la clase. "l cdigo para de,inir una clase se puede ver a continuacin:
class *om!reF var Anom!reC var AedadC ,unction comer.Acomida0F 77a$u+ el cdigo del m6todo H ,unction moverse.Adestino0F 77a$u+ el cdigo del m6todo H Centro de Tecnologa de la Informacin 2005. Universidad de Tarapac .

Manual de Introduccin a PHP5

,unction estudiar.Aasignatura0F 77a$u+ el cdigo del m6todo H H

Podr compro!arse $ue este cdigo no di,iere en nada del de anteriores de PHP, $ue ya soporta!an ciertas caracter+sticas de situacin cam!iar a poco $ue e#ploremos las caracter+sticas ms PHP 5, $ue implicarn mejoras $ue no esta!an presentes en anteriores. Instanciar o#%etos a $artir de clases

las versiones la P//. "sta avanzadas de las versiones

Hemos visto $ue una clase es tan slo una de,inicin. %i $ueremos tra!ajar con las clases de!emos instanciar o!jetos, proceso $ue consiste en generar un ejemplar de una clase. Por ejemplo, tenemos la clase *om!re anterior. &on la clase en si no podemos *acer nada, pero podemos crear o!jetos *om!re a partir de esa clase. &ada o!jeto *om!re tendr unas caracter+sticas propias, como la edad o el nom!re. Adems podr desempe1ar unas ,unciones como comer o moverse, a*ora !ien, cada uno comer o se mover por su cuenta cuando le sea solicitado, sin inter,erir en principio con lo $ue pueda estar *aciendo otro *om!re. Oa $ue estamos, vamos a ver cmo se generar+an un par de *om!res, es decir, cmo se instanciar+an un par de o!jetos de la clase *om!re. Para ello utilizamos el operador ne .
Apepe B ne nom!re.0C Ajuan B ne nom!re.0C

1onclusin "s importante darse cuenta de la di,erencia entre un o!jeto y una clase. 5a clase es una de,inicin de unas caracter+sticas y ,uncionalidades, algo a!stracto $ue se concreta con la instanciacin de un o!jeto de dic*a clase. Un o!jeto ya tiene propiedades, con sus valores concretos, y se le pueden pasar mensajes .llamar a los m6todos0 para $ue *agan cosas.

Centro de Tecnologa de la Informacin 2005. Universidad de Tarapac .

Manual de Introduccin a PHP5

14

. Constructores en PHP 5
5os constructores se encargan de resumir las acciones de inicializacin de los o!jetos. &uando se instancia un o!jeto, se tienen $ue realizar varios pasos en su inicializacin, por ejemplo dar valores a sus atri!utos y eso es de lo $ue se encarga el constructor. 5os constructores pueden reci!ir unos datos para inicializar los o!jetos como se desee en cada caso. 5a sinta#is para la creacin de constructor var+a con respecto a la de PHP ( y ), pues de!e llamarse con un nom!re ,ijo: IIconstruct.0. .%on dos guiones !ajos antes de la pala!ra =construct=0. A lo largo de los ejemplos de este manual vamos a ir creando un cdigo para gestin de un videoclu!. Eamos a empezar de,iniendo una clase cliente, $ue utilizaremos luego en nuestro programa.
class clienteF var Anom!reC var AnumeroC var ApeliculasIal$uiladasC ,unction IIconstruct.Anom!re,Anumero0F At*is9Gnom!reBAnom!reC At*is9GnumeroBAnumeroC At*is9GpeliculasIal$uiladasBarray.0C H ,unction dameInumero.0F return At*is9GnumeroC H H

"l constructor en esta clase reci!e el nom!re y nmero $ue asignar al cliente, $ue introduce luego en sus correspondientes propiedades. Adems inicializa el atri!uto pel+culasIal$uiladas como un array, en este caso vac+o por$ue todav+a no tiene ninguna pel+cula en su poder.
Nota: "n programacin orientada a o!jetos At*is *ace re,erencia al o!jeto so!re el $ue se est ejecutando el m6todo. "n este caso, como se trata de un constructor, At*is *ace re,erencia al o!jeto $ue se est construyendo. &on At*is9Gnom!reBAnom!reC estamos asignando al atri!uto Jnom!reK del o!jeto $ue se est construyendo el valor $ue contiene la varia!le Anom!re, $ue se *a reci!ido por parmetro.

5uego *emos creado un m6todo muy sencillo para poder utilizar el o!jeto. Eamos a ver unas acciones simples para ilustrar el proceso de instanciacin y utilizacin de los o!jetos.
77instanciamos Acliente8 Acliente' 77mostramos ec*o ="l ec*o ="l B B un par ne ne numero del cliente del cliente de 8 ' de o!jetos cliente.=Pepe=, cliente.=<o!erto=, es: es: cada = = . . cliente 80C 5P)0C

el identi,icador identi,icador

cliente creado Acliente89GdameInumero.0C Acliente'9GdameInumero.0C

"ste ejemplo o!tendr+a esta salida como resultado de su ejecucin: "l identi,icador del cliente 8 es: 8 "l identi,icador del cliente ' es: 5P)

Centro de Tecnologa de la Informacin 2005. Universidad de Tarapac .

Manual de Introduccin a PHP5

11

!. "estructores en PHP 5
5os destructores son ,unciones $ue se encargan de realizar las tareas $ue se necesita ejecutar cuando un o!jeto deja de e#istir. &uando un o!jeto ya no est re,erenciado por ninguna varia!le, deja de tener sentido $ue est6 almacenado en la memoria, por tanto, el o!jeto se de!e destruir para li!erar su espacio. "n el momento de su destruccin se llama a la ,uncin destructor, $ue puede realizar las tareas $ue el programador estime oportuno realizar. 5a creacin del destructor es opcional. %lo de!emos crearlo si deseamos *acer alguna cosa cuando un o!jeto se elimine de la memoria. "l destructor es como cual$uier otro m6todo de la clase, aun$ue de!e declararse con un nom!re ,ijo: IIdestruct.0. "n el cdigo siguiente vamos a ver un destructor en ,uncionamiento. Aun$ue la accin $ue realiza al destruirse el o!jeto no es muy til, nos puede servir !ien para ver cmo tra!aja.
class clienteF var Anom!reC var AnumeroC var ApeliculasIal$uiladasC ,unction IIconstruct.Anom!re,Anumero0F At*is9Gnom!reBAnom!reC At*is9GnumeroBAnumeroC At*is9GpeliculasIal$uiladasBarray.0C H ,unction IIdestruct.0F ec*o =L!rGdestruido: = . At*is9Gnom!reC H ,unction dameInumero.0F return At*is9GnumeroC H H 77instanciamos un par de o!jetos cliente Acliente8 B ne cliente.=Pepe=, 80C Acliente' B ne cliente.=<o!erto=, 5P)0C 77mostramos el numero de cada cliente creado ec*o ="l identi,icador del cliente 8 es: = . Acliente89GdameInumero.0C ec*o =L!rG"l identi,icador del cliente ' es: = . Acliente'9GdameInumero.0C

"ste cdigo es igual $ue el anterior. %lo se *a a1adido el destructor, $ue imprime un mensaje en pantalla con el nom!re del cliente $ue se *a destruido. Dras su ejecucin o!tendr+amos la siguiente salida. "l identi,icador del cliente 8 es: 8 "l identi,icador del cliente ' es: 5P) destruido: Pepe destruido: <o!erto &omo vemos, antes de aca!ar el script, se li!era el espacio en memoria de los o!jetos, con lo $ue se ejecuta el destructor y aparece el correspondiente mensaje en la pgina.
Centro de Tecnologa de la Informacin 2005. Universidad de Tarapac .

Manual de Introduccin a PHP5

12

Un o!jeto puede $uedar sin re,erencias y por lo tanto ser destruido, por muc*as razones. Por ejemplo, el o!jeto puede ser una varia!le local de una ,uncin y al ,inalizarse la ejecucin de esa ,uncin la varia!le local dejar+a de tener validez, con lo $ue de!e destruirse. "l cdigo siguiente ilustra cmo una varia!le local a cual$uier m!ito .por ejemplo, local a una ,uncin0, se destruye cuando ese m!ito *a ,inalizado.
,unction creaIclienteIlocal.0F AclienteIlocal B ne cliente.=soy local=, 50C H creaIclienteIlocal.0

5a ,uncin simplemente crea una varia!le local $ue contiene la instanciacin de un cliente. &uando la ,uncin se aca!a, la varia!le local deja de e#istir y por lo tanto se llama al destructor de,inido para ese o!jeto.
Nota: Dam!i6n podemos des*acernos de un o!jeto sin necesidad $ue aca!e el m!ito donde ,ue creado. Para ello tenemos la ,uncin unset.0 $ue reci!e una varia!le y la elimina de la memoria. &uando se pierde una varia!le $ue contiene un o!jeto y ese o!jeto deja de tener re,erencias, se elimina al o!jeto y se llama al destructor.

#. Modi$icadores de acceso a %&todos y 'ro'iedades en PHP5


Eeremos en este cap+tulo los nuevos modi,icadores de acceso a los m6todos y atri!utos de los o!jetos $ue se *an incorporado en PHP 5. "stos modi,icadores de acceso no son otros $ue los conocidos pu!lic, protected y private, $ue ya disponen otros lenguajes como Mava. Uno de los principios de la programacin orientada a o!jetos es la encapsulacin, $ue es un proceso por el $ue se ocultan las caracter+sticas internas de un o!jeto a a$uellos elementos $ue no tienen por$ue conocerla. 5os modi,icadores de acceso sirven para indicar los permisos $ue tendrn otros o!jetos para acceder a sus m6todos y propiedades. Modi-icador $u#lic "s el nivel de acceso ms permisivo. %irve para indicar $ue el m6todo o atri!uto de la clase es p!lico. "n este caso se puede acceder a ese atri!uto, para visualizarlo o editarlo, por cual$uier otro elemento de nuestro programa. "s el modi,icador $ue se aplica si no se indica otra cosa. Eeamos un ejemplo de clase donde *emos declarado como pu!lic sus elementos, un m6todo y una propiedad. %e trata de la clase =dado=, $ue tiene un atri!uto con su puntuacin y un m6todo para tirar el dado y o!tener una nueva puntuacin aleatoria.
class dadoF pu!lic ApuntosC ,unction IIconstruct.0F srand..dou!le0microtime.0Q8RRRRRR0C H pu!lic ,unction tirate.0F At*is9GpuntosBArandval B rand.8,P0C H Centro de Tecnologa de la Informacin 2005. Universidad de Tarapac .

Manual de Introduccin a PHP5

13

H AmiIdado B ne dado.0C

,or .AiBRCAiL(RCAiSS0F AmiIdado9Gtirate.0C ec*o =L!rGHan salido = . AmiIdado9Gpuntos . = puntos=C H

Eemos la declaracin de la clase dado y luego unas l+neas de cdigo para ilustrar su ,uncionamiento. "n el ejemplo se realiza un !ucle (R veces, en las cuales se tira el dado y se muestra la puntuacin $ue se *a o!tenido. &omo el atri!uto Apuntos y el m6todo tirate.0 son p!licos, se puede acceder a ellos desde ,uera del o!jeto, o lo $ue es lo mismo, desde ,uera del cdigo de la clase. Modi-icador $rivate "s el nivel de acceso ms restrictivo. %irve para indicar $ue esa varia!le slo se va a poder acceder desde el propio o!jeto, nunca desde ,uera. %i intentamos acceder a un m6todo o atri!uto declarado private desde ,uera del propio o!jeto, o!tendremos un mensaje de error indicando $ue no es posi!le a ese elemento. %i en el ejemplo anterior *u!i6ramos declarado private el m6todo y la propiedad de la clase dado, *u!i6ramos reci!ido un mensaje de error. A$u+ tenemos otra posi!le implementacin de la clase dado, declarando como private el atri!uto puntos y el m6todo tirate.0.
class dadoF private ApuntosC ,unction IIconstruct.0F srand..dou!le0microtime.0Q8RRRRRR0C H private ,unction tirate.0F At*is9GpuntosBArandval B rand.8,P0C H pu!lic ,unction dameInuevaIpuntuacion.0F At*is9Gtirate.0C return At*is9GpuntosC H H AmiIdado B ne dado.0C

,or .AiBRCAiL(RCAiSS0F ec*o =L!rGHan salido = . AmiIdado9GdameInuevaIpuntuacion.0 . = puntos=C H

Hemos tenido $ue crear un nuevo m6todo p!lico para operar con el dado, por$ue si es todo privado no *ay manera de *acer uso de 6l. "l mencionado m6todo es dameInuevaIpuntuacin.0, $ue realiza la accin de tirar el dado y devolver el valor $ue *a salido. Modi-icador $rotected "ste indica un nivel de acceso medio y un poco ms especial $ue los anteriores. %irve para $ue el m6todo o atri!uto sea p!lico dentro del cdigo de la propia clase
Centro de Tecnologa de la Informacin 2005. Universidad de Tarapac .

Manual de Introduccin a PHP5

1"

y de cual$uier clase $ue *erede de a$uella donde est el m6todo o propiedad protected. "s privado y no accesi!le desde cual$uier otra parte. "s decir, un elemento protected es p!lico dentro de la propia clase y en sus *eredadas. 3s adelante e#plicaremos la *erencia y podremos o,recer ejemplos con el modi,icador protected. 1onclusin 3uc*as veces el propio desarrollador es el $ue ,ija su criterio a la *ora de aplicar los distintos modi,icadores de acceso a atri!utos y m6todos. Poca proteccin implica $ue los o!jetos pierdan su encapsulacin y con ello una de las ventajas de la P//. Una proteccin mayor puede *acer ms la!orioso de generar el cdigo del programa, pero en general es aconseja!le.

(. )a *erencia en PHP5
5a *erencia es uno de los mecanismos ,undamentales de la programacin orientada a o!jetos. Por medio de la *erencia, se pueden de,inir clases a partir de la declaracin de otras clases. 5as clases $ue *eredan incluyen tanto los m6todos como las propiedades de la clase a partir de la $ue estn de,inidos. Por ejemplo, pensemos en la clase =ve*+culo=. "sta clase general puede incluir las caracter+sticas generales de todos los ve*+culos .atri!utos de la clase0, como la matr+cula, a1o de ,a!ricacin y potencia. Adems, incluir algunas ,uncionalidades .m6todos de la clase0 como podr+an ser, arrancar.0 o moverse.0. A*ora !ien, en la prctica e#isten varios tipos de ve*+culos, como los coc*es, los auto!uses y los camiones. Dodos ellos tienen unas caracter+sticas comunes, $ue *an sido de,inidas en la clase ve*+culo. Adems, tendrn una serie de caracter+sticas propias del tipo de ve*+culo, $ue, en principio, no tienen otros tipos de ve*+culos. Por ejemplo, los camiones pueden tener una carga m#ima permitida o los auto!uses un nmero de plazas disponi!les. ;el mismo modo, las clases ms espec+,icas pueden tener unas ,uncionalidades propias, como los camiones cargar.0 y descargar.0, o los auto!uses aceptarIpasajeros.0 o venderI!illete.0. 5o normal en sistemas de *erencia es $ue las clases $ue *eredan de otras incluyan nuevas caracter+sticas y ,uncionalidades, aparte de los atri!utos y m6todos *eredados. Pero esto no es imprescindi!le, de modo $ue se pueden crear o!jetos $ue *ereden de otros y no incluyan nada nuevo. 8inta9is de herencia en PHP 5 5a programacin orientada a o!jetos nos o,rece una serie de mecanismos para de,inir este tipo de estructuras, de modo $ue se puedan crear jerar$u+as de o!jetos $ue *eredan unos de otros. Eeremos a*ora cmo de,inir estas estructuras de *erencia en PHP 5. Para ello, continuando con nuestro ejemplo de video clu!, vamos a crear los distintos tipos de elementos $ue se o,recen en al$uiler. &omo todo el mundo conoce, los video clu!s o,recen distintos tipos de elementos para al$uiler, como pueden ser las pel+culas .cintas de v+deo o ;E;0 y los juegos. &ada elemento tiene unas caracter+sticas propias y algunas comunes. Hemos llamado =soporte= a la clase general, $ue incluye las caracter+sticas comunes para todos los tipos de elementos en al$uiler. 5uego *emos creado tres tipos de soportes distintos, $ue *eredan de la clase soporte, pero $ue incluyen algunas caracter+sticas y ,uncionalidades nuevas. "stos tipos de soporte sern =cintaIvideo=, =dvd= y =juego=.
Centro de Tecnologa de la Informacin 2005. Universidad de Tarapac .

Manual de Introduccin a PHP5

15

"l es$uema de *erencia $ue vamos a realizar en este ejemplo se puede ver en la siguiente imagen.

"mpezamos por la clase soporte. %u cdigo ser el siguiente:


class soporteF pu!lic AtituloC protected AnumeroC private AprecioC ,unction IIconstruct.Atit,Anum,Aprecio0F At*is9Gtitulo B AtitC At*is9Gnumero B AnumC At*is9Gprecio B AprecioC H pu!lic ,unction dameIprecioIsinIiva.0F return At*is9GprecioC H pu!lic ,unction dameIprecioIconIiva.0F return At*is9Gprecio Q 8.8PC H pu!lic ,unction dameInumeroIidenti,icacion.0F return At*is9GnumeroC H pu!lic ,unction imprimeIcaracteristicas.0F ec*o At*is9GtituloC ec*o =L!rG= . At*is9Gprecio . = .>EA no incluido0=C H

5os atri!utos $ue *emos de,inido son, t+tulo, numero .un identi,icador del soporte0 y precio. Hemos aplicado a cada uno un modi,icador de acceso distinto, para poder practicar los distintos tipos de acceso. Hemos de,inido un constructor, $ue reci!e los valores para la inicializacin del o!jeto. Un m6todo dameIprecioIsinIiva.0, $ue devuelve el precio del soporte, sin aplicarle el >EA. /tro m6todo dameIprecioIconIiva.0, $ue devuelve el precio una vez aplicado el 8PT de >EA. "l m6todo dameInumeroIidenti,icacion.0, $ue devuelve el nmero de identi,icador y imprimeIcaracteristicas.0, $ue muestra en la pgina las caracter+sticas de este soporte.

Centro de Tecnologa de la Informacin 2005. Universidad de Tarapac .

Manual de Introduccin a PHP5

1)

Nota: &omo se *a de,inido como private el atri!uto precio, este atri!uto slo se podr acceder dentro del cdigo de la clase, es decir, en la propia de,inicin del o!jeto. %i $ueremos acceder al precio desde ,uera de la clase .algo muy normal si tenemos en cuenta $ue vamos a necesitar el precio de un soporte desde otras partes de la aplicacin0 ser necesario crear un m6todo $ue nos devuelva el valor del precio. "ste m6todo de!er+a de,inirse como pu!lic, para $ue se pueda acceder desde cual$uier sitio $ue se necesite.

"n todos los m6todos se *ace uso de la varia!le At*is. "sta varia!le no es ms $ue una re,erencia al o!jeto so!re el $ue se est ejecutando el m6todo. "n programacin orientada a o!jetos, para ejecutar cual$uiera de estos m6todos, primero tenemos $ue *a!er creado un o!jeto a partir de una clase. 5uego podremos llamar los m6todos de un o!jeto. "sto se *ace con AmiIo!jeto9 GmetodoIaIllamar.0. ;entro de m6todo, cuando se utiliza la varia!le At*is, se est *aciendo re,erencia al o!jeto so!re el $ue se *a llamado al m6todo, en este caso, el o!jeto AmiIo!jeto. &on At*is9Gtitulo estamos *aciendo re,erencia al atri!uto =titulo= $ue tiene el o!jeto AmiIo!jeto. %i $ueremos pro!ar la clase soporte, para con,irmar $ue se ejecuta correctamente y $ue o,rece resultados co*erentes, podemos utilizar un cdigo como el siguiente.
Asoporte8 B ne soporte.=5os >ntoca!les=,'',(0C ec*o =L!G= . Asoporte89Gtitulo . =L7!G=C ec*o =L!rGPrecio: = . Asoporte89GdameIprecioIsinIiva.0 . = euros=C ec*o =L!rGPrecio >EA incluido: = . Asoporte89GdameIprecioIconIiva.0 . = euros=C

"n este caso *emos creado una instancia de la clase soporte, en un o!jeto $ue *emos llamado Asoporte8. 5uego imprimimos su atri!uto titulo .como el t+tulo *a sido de,inido como pu!lic, podemos acceder a 6l desde ,uera del cdigo de la clase. 5uego se llaman a los m6todos dameIprecioIsinIiva.0 y dameIprecioIconIiva.0 para el o!jeto creado. -os dar+a como resultado esto: 5os >ntoca!les Precio: ( euros Precio >EA incluido: (.)U euros "n siguientes cap+tulos vamos a ver cmo de,inir clases $ue *ereden de la clase soporte. &omo estamos viendo, los mecanismos de *erencia en PHP5 son similares a los e#istentes en otros lenguajes de programacin. A*ora vamos a relatar cmo construir una clase $ue *ereda de otra. &ontinuando con nuestro ejemplo de videoclu!, vamos a construir una clase para los soportes de tipo cinta de video. 5as cintas de v+deo tienen un atri!uto nuevo $ue es la duracin de la cinta. -o tienen ninguna clase nueva, aun$ue de!emos aprender a so!rescri!ir m6todos creados para el soporte, dado $ue a*ora tienen $ue *acer tareas ms espec+,icas. 8o#rescri#ir m/todos Antes de mostrar el cdigo de la clase cintaIvideo, vamos a *a!lar so!re la so!rescritura o sustitucin de m6todos, $ue es un mecanismo por el cual una clase $ue *ereda puede rede,inir los m6todos $ue est *eredando. Pensemos en una ca,etera. %a!emos $ue e#isten muc*os tipos de ca,eteras y todas *acen ca,6, pero el mecanismo para *acer el ca,6 es distinto dependiendo del tipo
Centro de Tecnologa de la Informacin 2005. Universidad de Tarapac .

Manual de Introduccin a PHP5

1*

de ca,etera. "#isten ca,eteras e#press, ca,eteras por goteo y *asta se puede *acer ca,6 con un calcet+n. -uestra ca,etera =padre= .de la $ue va a *eredar todas las ca,eteras0 puede tener de,inido un m6todo *acerIca,e.0, pero no necesariamente todas las ca,eteras $ue puedan *eredar de esta *acen el ca,6 siguiendo el mismo proceso. "ntonces podemos de,inir un m6todo para *acer ca,6 estndar, $ue tendr+a la clase ca,etera. Pero al de,inir las clases ca,eteraIe#press y ca,eteraIgoteo, de!er+amos so!rescri!ir el m6todo *acerIca,e.0 para $ue se ajuste al procedimiento propio de estas. 5a so!rescritura de m6todos es algo !astante comn en mecanismos de *erencia, puesto $ue los m6todos $ue ,ueron creados para una clase =padre= no tienen por $u6 ser los mismos $ue los de,inidos en las clases $ue *eredan. Eeremos cmo so!rescri!ir o sustituir m6todos en un ejemplo de *erencia, siguiendo nuestro ejemplo de videoclu!. 8inta9is $ara heredar en PHP 5 Ha!+amos comentado $ue el videoclu! dispone de distintos elementos para al$uilar, como cintas de v+deo, ;E; o juegos. Ha!+amos creado una clase soporte, $ue vamos a *eredar en cada uno de los elementos disponi!les para al$uiler. Eamos a empezar por la clase cintaIvideo, cuyo cdigo ser el siguiente.
class cintaIvideo e#tends soporteF private AduracionC ,unction IIconstruct.Atit,Anum,Aprecio,Aduracion0F parent::IIconstruct.Atit,Anum,Aprecio0C At*is9Gduracion B AduracionC H pu!lic ,unction imprimeIcaracteristicas.0F ec*o =Pel+cula en EH%:L!rG=C parent::imprimeIcaracteristicas.0C ec*o =L!rG;uracin: = . At*is9GduracionC H H

&on la primera l+nea class cintaIvideo e#tends soporte estamos indicando $ue se est de,iniendo la clase cintaIvideo y $ue va a *eredar de la clase soporte.
Nota: &omo se est *eredando de una clase, PHP tiene $ue conocer el cdigo de la =padre=, en este caso la clase soporte. ;e modo $ue el cdigo de la clase soporte de!e incluido dentro del arc*ivo de la clase cintaIvideo. Podemos colocar los dos cdigos mismo ,ic*ero, o si estn en ,ic*eros independientes, de!emos incluir el cdigo de la soporte con la instruccin include o re$uire de PHP. clase estar en el clase

"n la clase cintaIvideo *emos de,inido un nuevo atri!uto llamado Aduracion, $ue almacena el tiempo $ue dura la pel+cula. Aun$ue la clase so!re la $ue *eredamos .la clase soporte0 ten+a de,inido un constructor, la cinta de v+deo de!e inicializar la nueva propiedad Aduracion, $ue es espec+,ica de las cintas de video. Por ello, vamos a so!rescri!ir o sustituir el m6todo constructor, lo $ue se *ace simplemente volviendo a escri!ir el m6todo. 5a gracia
Centro de Tecnologa de la Informacin 2005. Universidad de Tarapac .

Manual de Introduccin a PHP5

10

a$u+ consiste en $ue el sistema puede !asar la nueva declaracin del constructor en la declaracin $ue e#ist+a para la clase de la $ue *ereda. "s decir, ya se *a!+a de,inido un constructor para la clase soporte, $ue inicializa!a los atri!utos de esta clase. A*ora, para la clase cintaIvideo, *ay $ue inicializar los atri!utos de,inidos en la clase soporte, ms el atri!uto Aduracion, $ue es propio de cintaIvideo. "l cdigo del constructor es el siguiente:
,unction IIconstruct.Atit,Anum,Aprecio,Aduracion0F parent::IIconstruct.Atit,Anum,Aprecio0C At*is9Gduracion B AduracionC H

"n la primera l+nea del constructor se llama al constructor creado para la clase =soporte=. Para ello utilizamos parent:: y luego el nom!re del m6todo de la clase padre al $ue se $uiere llamar, en este caso IIconstructor.0. Al constructor de la clase padre le enviamos las varia!les $ue se de!en inicializar con la clase padre. "n la segunda l+nea del constructor se inicializa el atri!uto duracion, con lo $ue *ayamos reci!ido por parmetro. -os pasa lo mismo con el m6todo imprimeIcaracteristicas.0, $ue a*ora de!e mostrar tam!i6n el nuevo atri!uto, propio de la clase cintaIvideo. &omo se puede o!servar en el cdigo de la ,uncin, se *ace uso tam!i6n de parent::imprimeIcaracteristicas.0 para utilizar el m6todo de,inido en la clase padre. %i $ueremos pro!ar la clase cintaIvideo, podr+amos utilizar un cdigo como este:
Amicinta B ne cintaIvideo.=5os /tros=, '', ).5, =885 minutos=0C ec*o =L!G= . Amicinta9Gtitulo . =L7!G=C ec*o =L!rGPrecio: = . Amicinta9GdameIprecioIsinIiva.0 . = euros=C ec*o =L!rGPrecio >EA incluido: = . Amicinta9GdameIprecioIconIiva.0 . = euros=C

5o $ue nos devolver+a lo siguiente: 5os /tros Precio: ).5 euros Precio >EA incluido: 5.'' euros Pel+cula en EH%: 5os /tros ).5 .>EA no incluido0 ;uracin: 885 minutos 1reamos otras clases a $artir de una clase $adre. $ara continuar con nuestro e%em$lo de videoclu#& 5a clase soporte tiene otras clases $ue *eredan de ella y $ue todav+a no *emos de,inido. Eeamos primero el cdigo de la clase =dvd=, $ue es muy parecido al visto para la clase cintaIvideo. 5o nico $ue cam!ia es $ue a*ora vamos a de,inir otros atri!utos relacionados con los ;E;, como son los idiomas disponi!les en el ;E; y el ,ormato de pantalla $ue tiene la gra!acin.
class dvd e#tends soporteF pu!lic AidiomasIdisponi!lesC private A,ormatoIpantallaC Centro de Tecnologa de la Informacin 2005. Universidad de Tarapac .

Manual de Introduccin a PHP5

12

,unction IIconstruct.Atit,Anum,Aprecio,Aidiomas,Apantalla0F parent::IIconstruct.Atit,Anum,Aprecio0C At*is9GidiomasIdisponi!les B AidiomasC At*is9G,ormatoIpantalla B ApantallaC pu!lic ,unction imprimeIcaracteristicas.0F ec*o =Pel+cula en ;E;:L!rG=C parent::imprimeIcaracteristicas.0C ec*o =L!rG= . At*is9GidiomasIdisponi!lesC H

Nota:Para una e#plicacin detallada de este cdigo os re,erimos al cap+tulo anterior, donde se e#plica!a la clase cintaIvideo y la so!rescritura de m6todos.

Por su parte, la clase juego, tendr ( nuevos atri!utos. "stos son =consola=, para especi,icar la consola para la $ue est creado este juego, =minInumIjugadores=, para especi,icar el nmero de jugadores m+nimo y =ma#InumIjugadores=, para especi,icar el m#imo nmero de jugadores $ue pueden participar en el juego. "ste ser el cdigo de la clase juego.
class juego e#tends soporteF pu!lic AconsolaC 77nom!re de la consola del juego ej: playstation private AminInumIjugadoresC private Ama#InumIjugadoresC ,unction IIconstruct.Atit,Anum,Aprecio,Aconsola,AminIj,Ama#Ij0F parent::IIconstruct.Atit,Anum,Aprecio0C At*is9Gconsola B AconsolaC At*is9GminInumIjugadores B AminIjC At*is9Gma#InumIjugadores B Ama#IjC H pu!lic ,unction imprimeIjugadoresIposi!les.0F i, .At*is9GminInumIjugadores BB At*is9Gma#InumIjugadores0F i, .At*is9GminInumIjugadoresBB80 ec*o =L!rGPara un jugador=C else ec*o =L!rGPara = . At*is9GminInumIjugadores . = jugadores=C HelseF ec*o =L!rG;e = . At*is9GminInumIjugadores . = a = . At*is9Gma#InumIjugadores . = Mugadores.=C H H pu!lic ,unction imprimeIcaracteristicas.0F ec*o =Muego para: = . At*is9Gconsola . =L!rG=C parent::imprimeIcaracteristicas.0C ec*o =L!rG= . At*is9GimprimeIjugadoresIposi!les.0C H

-os ,ijamos en el constructor, $ue llama al constructor de la clase padre para inicializar algunos atri!utos propios de los soportes en general. 5uego nos ,ijamos en el m6todo imprimeIjugadoresIposi!les.0, $ue muestra los jugadores permitidos. Ha sido declarada como pu!lic, para $ue se pueda acceder a ella desde cual$uier lugar. -os da un mensaje como =Para un jugador= o =;e 8 a ' Mugadores=, dependiendo de los valores minInumIjugadores y ma#InumIjugadores.
Centro de Tecnologa de la Informacin 2005. Universidad de Tarapac .

Manual de Introduccin a PHP5

24

Por su parte, se so!rescri!e la ,uncin imprimeIcaracteristicas.0, para mostrar todos los datos de cada juego. Primero se muestra la consola para la $ue se *a creado el juego. 5os datos generales .propios de la clase =soporte=0 se muestran llamando al mismo m6todo de la clase =parent= y el nmero de jugadores disponi!les se muestra con una llamada al m6todo imprimeIjugadoresIposi!les.0. Podr+amos utilizar un cdigo como el $ue sigue, si es $ue $ueremos compro!ar $ue la clase ,unciona correctamente y $ue nos o,rece la salida $ue est!amos pensando.
Amijuego B ne juego.=Vinal Vantasy=, '8, '.5, =Playstation=,8,80C Amijuego9GimprimeIcaracteristicas.0C 77esta l+nea dar+a un error por$ue no se permite acceder a un atri!uto private del o!jeto 77ec*o =L!rGMugadores: = . Amijuego9GminInumIjugadoresC 77*a!ria $ue crear un m6todo para $ue acceda a los atri!utos private Amijuego9GimprimeIjugadoresIposi!les.0C ec*o =LpG=C Amijuego' B ne juego.=?P 3otoracer=, 'W, (, =Playstation >>=,8,'0C ec*o =L!G= . Amijuego'9Gtitulo . =L7!G=C Amijuego'9GimprimeIjugadoresIposi!les.0C

"ste cdigo $ue utiliza la clase =juego= dar como salida: Muego para: Playstation Vinal Vantasy '.5 .>EA no incluido0 Para un jugador Para un jugador ?P 3otoracer ;e 8 a ' Mugadores.

1+.

)os atributos de los objetos 'ueden ser otros objetos

:os atri#utos o $ro$iedades de los o#%etos $ueden ser de cualquier ti$o. incluso $ueden ser otros o#%etos& 5as caracter+sticas de los o!jetos, $ue se almacenan por medio de los llamados atri!utos o propiedades, pueden ser de diversa naturaleza. 5a clase *om!re puede tener distintos tipos de atri!utos, como la edad .num6rico0, el nom!re propio .tipo cadena de caracteres0, color de piel .$ue puede ser un tipo cadena de caracteres o tipo enumerado, $ue es una especie de varia!le $ue slo puede tomar unos pocos valores posi!les0. Dam!i6n puede tener una estatura o un peso .$ue podr+an ser de tipo ,loat o nmero en coma ,lotante0. "n general, podemos utilizar cual$uier tipo para los atri!utos de los o!jetos, incluso podemos utilizar otros o!jetos. Por ejemplo, podr+amos de,inir como atri!uto de la clase *om!re sus manos. ;ada la complejidad de las manos, estas podr+an de,inirse como otro o!jeto. Por ejemplo, las manos tendr+an como caracter+sticas la longitud de los dedos, un coe,iciente de elasticidad. &omo ,uncionalidades o m6todos, podr+amos de,inir agarrar algo, soltarlo, pegar una !o,etada, o cortarse las u1as. As+ pues, uno de los atri!utos de la clase *om!re podr+a ser un nuevo o!jeto, con su propias caracter+sticas y ,uncionalidades. 5a complejidad de las manos no le importa al desarrollador de la clase *om!re, por el principio de encapsulacin, dado
Centro de Tecnologa de la Informacin 2005. Universidad de Tarapac .

Manual de Introduccin a PHP5

21

$ue este conoce sus propiedades .o a$uellas declaradas como pu!lic0 y los m6todos .tam!i6n los $ue se *ayan decidido declarar como p!licos0 y no necesita preocuparse so!re cmo se *an codi,icado. 1lase cliente del videoclu# Para continuar el ejemplo del videoclu!, *emos creado la clase cliente $ue vamos a e#plicar a continuacin. "n los clientes *emos de,inido como atri!uto, entre otros, las pel+culas o juegos al$uilados.
Nota: &omo vemos, los o!jetos pueden tener algunos atri!utos tam!i6n de tipo o!jeto. "n ese caso pueden *a!er distintos tipos de relaciones entre o!jetos. Por ejemplo, por pertenencia, como en el caso de la clase *om!re y sus manos, pues a un *om!re le pertenecen sus manos. Dam!i6n se pueden relacionar los o!jetos por asociacin, como es el caso de los clientes y las pel+culas $ue al$uilan, pues en ese caso un cliente no tiene una pel+cula propiamente dic*a, sino $ue se asocia con una pel+cula momentneamente.

5a clase cliente $ue *emos creado tiene cierta complejidad, esperamos $ue no sea demasiada para $ue se pueda entender ,cilmente. 5a e#plicaremos poco a poco para ,acilitar las cosas. Atri#utos de la clase cliente Hemos de,inido una serie de atri!utos para tra!ajar con los clientes. Denemos los siguientes:
pu!lic Anom!reC private AnumeroC private AsoportesIal$uiladosC private AnumIsoportesIal$uiladosC private Ama#Ial$uilerIconcurrenteC

&omo se puede ver, se *an de,inido casi todos los atri!utos como private, con lo $ue slo se podrn acceder dentro del cdigo de la clase. "l atri!uto nom!re, $ue guarda el nom!re propio del cliente, es el nico $ue *emos dejado como p!lico y $ue por tanto se podr re,erenciar desde cual$uier parte del programa, incluso desde otras clases. "l atri!uto numero se utiliza para guardar el identi,icador num6rico del cliente. Por su parte, soportes al$uilados nos servir para asociar al cliente las pel+culas o juegos cuando este las al$uile. "l atri!uto numIsoportesIal$uilados almacenar el nmero de pel+culas o juegos $ue un cliente tiene al$uilados en todo momento. Por ltimo, ma#Ial$uilerIconcurrente indica el nmero m#imo de soportes $ue puede tener al$uilados un cliente en un mismo instante, no permiti6ndose al$uilar a ese cliente, a la vez, ms $ue ese nmero de pel+culas o juegos. "l nico atri!uto so!re el $ue merece la pena llamar la atencin es soportesIal$uilados, $ue contendr un array de soportes. "n cada casilla del array se introducirn las pel+culas o juegos $ue un cliente vaya al$uilando, para asociar esos soportes al cliente $ue las al$uil. "l array contendr tantas casillas como el ma#Ial$uilerIconcurrente, puesto $ue no tiene sentido asignar mayor espacio al array del $ue se va a utilizar. Para ,acilitar las cosas, cuando un cliente no tiene al$uilado nada, tendr el valor null en las casillas del array.

Centro de Tecnologa de la Informacin 2005. Universidad de Tarapac .

Manual de Introduccin a PHP5

22

Nota: <ecordemos $ue los soportes ,ueron de,inidos en cap+tulos anteriores de este manual de PHP 5 , mediante un mecanismo de *erencia. %oporte era una clase de la $ue *ereda!an las pel+culas en ;E;, las cintas de v+deo y los juegos.

1onstructor de la clase cliente


,unction IIconstruct.Anom!re,Anumero,Ama#Ial$uilerIconcurrenteB(0F At*is9Gnom!reBAnom!reC At*is9GnumeroBAnumeroC At*is9GsoportesIal$uiladosBarray.0C At*is9GnumIsoportesIal$uiladosBRC At*is9Gma#Ial$uilerIconcurrente B Ama#Ial$uilerIconcurrenteC 77inicializo las casillas del array de al$uiler a =null= 77un valor =null= $uiere decir $ue el no *ay al$uiler en esa casilla ,or .AiBRCAiLAma#Ial$uilerIconcurrenteCAiSS0F At*is9GsoportesIal$uiladosXAiYBnullC H H

"l constructor de la clase cliente reci!e los datos para inicializar el o!jeto. "stos son Anom!re, Anumero y Ama#Ial$uilerIconcurrente. %i nos ,ijamos, se *a de,inido por de,ecto a ( el nmero m#imo de al$uileres $ue puede tener un cliente, de modo $ue, en el caso de $ue la llamada al constructor no env+e el parmetro Ama#Ial$uilerIconcurrente se asumir el valor (. "l atri!uto soportesIal$uilados, como *a!+amos adelantado, ser un array $ue tendr tantas casillas como el m#imo de al$uileres concurrentes. "n las ltimas l+neas se inicializan a null el contenido de las casillas del array.

Centro de Tecnologa de la Informacin 2005. Universidad de Tarapac .

Das könnte Ihnen auch gefallen