Está en la página 1de 32

Programacin Orientada a Objetos con PHP

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 M!;lass33constant 2 5\n5;

$classname = 5M!;lass5;
echo $classname33constant 2 5\n5; // PP !"#"$

$class = new M!;lass/0;
$classO>shoS;onstant/0;

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

También podría gustarte