Anda di halaman 1dari 30

Objetos en PHP

Programacin con objetos


Qu es la POO?
La POO o programacin orientada a objetos se utiliza en muchos lenguajes de programacin. En ella se crean una serie de clases de objetos, los cuales podemos asignarles unas propiedades y unos mtodos o funciones. Una clase es un tipo determinado de objetos, por ejemplo en una supuesta tienda en la que se venden diversos artculos, la clase herramientas puede agrupar a una serie de objetos, como por ejemplo martillo, pinza, o tenazas. Por tanto, un objeto se crea siempre dentro de una clase a la cual pertenece. Las propiedades estn siempre relacionadas con los objetos, de forma que es el objeto el que posee unas propiedades. Siguiendo con nuestro ejemplo, las propiedades del objeto martillo podran ser precio, tamao o calidad. Los mtodos son funciones que podemos aplicar a los objetos, por ejemplo, en nuestra web queremos mostrar cada producto en una casilla, en la cual se mostrara una foto del producto, su precio, la calidad, etc. Podemos crear la funcin o mtodo muestra_producto la cual utilizaremos para mostrar en pantalla las propiedades del producto de una forma estructurada. Para programar con objetos, en primer lugar crearemos una clase de objetos, al crear la clase definiremos las propiedades y mtodos que debe tener esa clase, y por ltimo crearemos los objetos concretos de esa clase.

Creacin de clases
Para definir una clase de objetos, utilizaremos la palabra reservada class seguida del nombre de la clase. A continuacin, entre llaves escribiremos las propiedades y los mtodos de la clase. class Herramientas { ... } Hemos puesto el nombre de la clase (Herramientas) con la primera letra en mayscula, esto no es obligatorio, pero es conveniente para hacer una distincin entre nombres de clases y el resto de variables o cdigo que podamos crear.

Definir propiedades
Una vez creada la clase, dentro de las llaves escribiremos en primer lugar las propiedades que los objetos de esta clase deben tener. Para ello definiremos una serie de variables:

Objetos en PHP por Marco Cajeao

<?php class Herramientas { var $nombre="sin_nombre"; var $precio=0; var $imagen="objetos/herramientas.gif"; var $descripcion; } ?>

Al definir estas variables, hemos creado las propiedades que tendrn los objetos de esta clase. Si inicializamos las variables, es decir si les damos un valor, la propiedad indicada tendr ese valor por defecto, si no le damos ningn valor (como la variable $descripcin), la propiedad no tendr ningn valor por defecto. Los objetos que creamos no tienen contenido en s mismos, su contenido viene dado por sus propiedades y sus mtodos, es por eso que incluso si queremos sacar en pantalla el nombre del objeto, ste tiene que ser definido dentro de una propiedad. Ahora vamos a poner un poco de orden en el ejemplo que estamos utilizando, en principio todos los archivos y subcarpetas que creemos los guardaremos en una carpeta principal que llamaremos, por ejemplo Herramientas. Para empezar copiamos el cdigo anterior, tal como est, y lo guardamos en un archivo llamado clase_herramientas.php. En este archivo iremos guardando el cdigo php para la creacin de la clase herramientas. Lo copiamos tal como est sin aadirle ningn cdigo HTML, ya que cuando lo necesitemos ser llamado a la pgina mediante una instruccin include().

Preparar la pgina de ejemplo.


Crearemos ahora la pgina con el cdigo HTML que mostraremos en pantalla: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html> <head> <title>Herramientas</title>

Objetos en PHP por Marco Cajeao

<?php include("clase_herramientas.php"); ?> </head> <body> <h1>Herramientas</h1> </body> </html> De momento es una pgina normal, con la nica particularidad de que hemos incorporado el cdigo PHP anterior mediante la instruccin include. Como queremos hacer de esta pgina la pgina principal del sitio la guardaremos con el nombre de index.php . En la pgina queremos mostrar tambin las imgenes de los objetos que vayamos creando, por lo que para guardarlas crearemos una subcarpeta llamada objetos donde guardaremos las imgenes que necesitemos. De momento guardaremos all la siguiente imagen, que es la que hemos puesto por defecto en la propiedad imagen; la llamaremos herramientas.gif .

Instanciar un objeto
Se llama instanciar un objeto al hecho de crear un objeto concreto que pertenezca a una clase que ya existe. Seguimos con nuestro ejemplo, donde instanciaremos un objeto al que llamaremos $caja_herramientas. Para ello, abrimos la pgina index.php con el editor de textos, y despus de la etiqueta <h1>Herramientas</h1>, abrimos para escribir en php: (<?php ... ?>). Pondremos aqu el cdigo para instanciar un nuevo objeto y ver sus propiedades en pantalla. Para instanciar el objeto usaremos el siguiente cdigo: $caja_herramientas = new Herramientas;

Objetos en PHP por Marco Cajeao

Es decir para instanciar un objeto de una clase lo definimos en una variable ($caja_herramientas) y como valor le asignamos la palabra reservada new seguido del nombre de la clase a la que va a pertenecer.

Acceso a las propiedades del objeto


Ahora debemos acceder a sus propiedades, para ello lo haremos de la siguiente manera: echo $caja_herramientas->nombre;

Esto nos mostrara en pantalla la propiedad nombre del objeto $caja_herramientas. Como no le hemos cambiado el valor a esta propiedad, lo que nos mostrar en pantalla es el valor por defecto, el cual era: "sin nombre". Observa que la manera de acceder a una propiedad es mediante el nombre del objeto seguido de los signos ->(guin - mayor) seguido del nombre de la propiedad (sin el signo $ ). Sin embargo lo que queremos es darle un nuevo valor a esta propiedad, esto lo haremos por asignacin: $caja_herramientas->nombre = "Caja de herramientas"; Pondremos la lnea anterior en nuestra pgina, y aadiremos tambin las siguientes para cambiar los valores de otras propiedades: $caja_herramientas->precio = 60; $caja_herramientas->descripcion = "Caja completa de herramientas, 50 piezas calidad buena."; Observa que la propiedad imagen no la hemos cambiado, ya que su valor por defecto es el que queremos que tenga. Ahora queremos ver en pantalla las propiedades de este objeto, para ello escribiremos el siguiente cdigo: echo "<img src='$caja_herramientas->imagen' alt='$caja_herramientas>nombre' width='200' align='left'>"; echo "<p>Producto: $caja_herramientas->nombre. </p>"; echo "<p>Precio($): $caja_herramientas->precio </p>"; echo "<p>Descripcin: $caja_herramientas->descripcion. </p>"; Para mostrar la imagen, de la cual hemos guardado la ruta, debemos poner en la instruccin echo el cdigo HTML que muestre la imagen, fjate cmo en el atributo src escribimos la propiedad donde hemos guardado la ruta.

Objetos en PHP por Marco Cajeao

El cdigo de la pgina index.php quedar as:

<html> <head> <title>Herramientas</title> <?php include("clase_herramientas.php"); ?> </head> <body> <h1>Herramientas</h1> <?php $caja_herramientas = new Herramientas; $caja_herramientas->nombre = "Caja de herramientas"; $caja_herramientas->precio = 60; $caja_herramientas->descripcion ="Caja completa de herramientas, 50 piezas calidad buena."; echo "<img src='$caja_herramientas->imagen' alt='$caja_herramientas>nombre' width='200' align='left'>"; echo "<p>Producto: $caja_herramientas->nombre. </p>"; echo "<p>Precio($): $caja_herramientas->precio </p>"; echo "<p>Descripcin: $caja_herramientas->descripcion. </p>"; ?> </body> </html>

Objetos en PHP por Marco Cajeao

Si has seguido los pasos que hemos dado hasta ahora con este ejemplo la pgina index.php debe quedar como la siguiente:

Herramientas Producto: Caja de herramientas. Precio ($): 60 Descripcin: Caja completa de herramientas, 50 piezas calidad buena..

Mtodos en objetos
Definicin de mtodo.
En la pgina anterior vimos cmo crear un objeto, y cmo definir sus propiedades. Las propiedades son una caracterstica del objeto, siempre almacenan un valor. Los mtodos sin embargo representan acciones. Con un mtodo indicamos al cdigo que haga algo relacionado con el objeto, por ejemplo calcular un valor a partir de otros, sacar en pantalla algunas o todas las propiedades, etc. ESto lo haremos mediante funciones, por lo tanto un mtodo no es ms que una funcin donde pedimos al cdigo que haga algo con el objeto.

Crear un mtodo
En la pgina anterior hemos creado una clase llamada Herramientas. Siguiendo con este ejemplo, crearemos en primer lugar un mtodo que calcule el precio para artculos que tengan un tanto por ciento de descuento. el cdigo de la clase Herramientas lo tenamos guardado en un archivo llamado clase_herramientas.php. Abrimos ese archivo con el editor de textos, el cual debe tener el siguiente cdigo: <?php class Herramientas { var $nombre="sin_nombre"; var $precio=0; var $imagen="objetos/herramientas.gif"; }

Objetos en PHP por Marco Cajeao

?> En la clase herramientas (dentro de las llaves) escribiremos lo siguiente: En primer lugar definimos una nueva propiedad. var $descripcion; Despus escribiremos la funcin que crea el mtodo, de modo que el archivoclase_herramientas.php quedar as: <?php class Herramientas { var $nombre="sin_nombre"; var $precio=0; var $imagen="objetos/herramientas.gif"; var $precio_descuento; function descuento($porcentaje) { $rebaja=$this->precio - ($this->precio*($porcentaje/100)); $this->precio_descuento =$rebaja; } } ?> Explicaremos algunas cosas de esta funcin: La funcin puede llevar parmetros, en este caso en el parmetro indicaremos el tanto por ciento en que el producto est rebajado. La variable $this que aparece en la funcin se utiliza para hacer referencia al objeto al que se le aplica, es decir, al llamar a la funcin o mtodo, se hace sobre un objeto concreto de la clase, nos referimos a ese objeto, de ah que podamos ponerle tambin las propiedades del objeto. Mediante un clculo el mtodo aade el valor a la nueva propiedad que hemos definido anteriormente (precio_descuento) Por ltimo en la pgina principal, (index.php) debemos aadir el cdigo para poder visualizar la nueva propiedad, para ello en primer lugar llamaremos al mtodo para que haga el clculo del descuento.

Objetos en PHP por Marco Cajeao

$caja_herramientas->descuento(15); Como ves la forma correcta de llamar a un mtodo desde un objeto concreto es similar a la forma de llamar a una propiedad; es decir, mediante los signos -> . $nombre_objeto->nombre_metodo(); El mtodo, al igual que las funciones puede llevar parmetros, en este caso pasamos como parmetro el valor del tanto por ciento del descuento. El mtodo puede devolver tambin un valor de retorno, para ello utilizaremos al final de su cdigo la instruccin return, de la misma manera que se hace con el resto de las funciones. Una vez llamado al mtodo, la nueva propiedad debe tener el valor asignado por el mtodo, por lo que llamamos a la nueva propiedad para mostrarla en pantalla: echo "<p>Precio con descuento = $caja_herramientas>precio_descuento.</p>"; En la pgina index.php, el cdigo PHP para mostrar el objeto ser el siguiente: <?php $caja_herramientas = new Herramientas; $caja_herramientas->nombre = "Caja de herramientas"; $caja_herramientas->precio = 60; $caja_herramientas->descripcion ="Caja completa de herramientas, 50 piezas calidad buena."; echo "<img src='$caja_herramientas->imagen' alt='$caja_herramientas>nombre' width='200' align='left'>"; echo "<p>Producto: $caja_herramientas->nombre. </p>"; echo "<p>Precio: $caja_herramientas->precio </p>"; $caja_herramientas->descuento(15); echo "<p>Precio con descuento = $caja_herramientas>precio_descuento.</p>"; echo "<p>Descripcin: $caja_herramientas->descripcion. </p>"; ?> En color lila hemos destacado las nuevas lneas que hemos aadido al cdigo que ya tenamos antes. Objetos en PHP por Marco Cajeao 8

Mtodo para ver el objeto en pantalla


Una vez que hemos visto cmo se crea un mtodo, no nos ser difcil crear un mtodo que nos muestre las propiedades del objeto en pantalla. Mediante este mtodo evitaremos que, cada vez que creemos un objeto nuevo de la clase, tengamos que escribir el cdigo para mostrarlo, ya que con una simple llamada al mtodo, podremos mostrar el objeto. La funcin que crea este mtodo ser la siguiente, la cual debemos ponerla dentro de las llaves que delimitan la clase Herramientas, en el archivo clase_herramientas.php. function mostrar() { echo "<img src='$this->imagen' alt='$this->nombre' width='200' align='left'>"; echo "<p>Producto: $this->nombre. </p>"; echo "<p>Precio: $this->precio </p>"; if ($this->precio_descuento) { echo "<p>Precio con descuento = $this>precio_descuento.</p>"; } echo "<p>Descripcin: $this->descripcion. </p>"; } El cdigo dentro de la funcin es similar al que utilizabamos para mostrar el objeto en pantalla, salvo algunos cambios: Hemos cambiado el nombre del objeto por la variable $this. De esta manera el cdigo puede valer para cualquier objeto de esta clase. Para mostrar la propiedad precio_descuento, hemos puesto la condicin de que a esta se le haya asignado algn valor. Por otra parte en la pgina principal index.php, cambiaremos el cdigo que crea y muestra el objeto concreto, de manera que suprimiremos todas las instrucciones echo; y en su lugar pondremos la llamada a la funcin mostrar(). Si queremos aplicar un descuento, debemos antes llamar a la funcin descuento($porcentaje), tal como hacamos antes. El cdigo de la pgina index.php quedar as: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"

Objetos en PHP por Marco Cajeao

"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html> <head> <title>Herramientas</title> <?php include("clase_herramientas.php"); ?> </head> <body> <h1>Herramientas</h1> <?php $caja_herramientas = new Herramientas; $caja_herramientas->nombre = "Caja de herramientas"; $caja_herramientas->precio = 60; $caja_herramientas->descripcion ="Caja completa de herramientas, 50 piezas calidad buena."; $caja_herramientas->descuento(15); $caja_herramientas->mostrar(); ?> </body> </html> La ventaja de aplicar este nuevo mtodo es obvia en el caso de que tengamos que mostrar en pantalla varios objetos de esta misma clase, ya que con slo llamar al mtodo nos evitamos tener que escribir una y otra vez todas las instrucciones echo. Veamos ahora el cdigo completo de la pgina clase_herramientas.php, donde hemos guardado el cdigo de la clase herramientas. Este debe quedar as: <?php class Herramientas {

10

Objetos en PHP por Marco Cajeao

var $nombre="sin_nombre"; var $precio=0; var $imagen="objetos/herramientas.gif"; var $descripcion; var $precio_descuento; function descuento($porcentaje) { $rebaja=$this->precio - ($this->precio*($porcentaje/100)); $this->precio_descuento =$rebaja; } function mostrar() { echo "<img src='$this->imagen' alt='$this->nombre' width='200' align='left'>"; echo "<p>Producto: $this->nombre. </p>"; echo "<p>Precio: $this->precio </p>"; if ($this->precio_descuento) { echo "<p>Precio con descuento = $this>precio_descuento.</p>"; } echo "<p>Descripcin: $this->descripcion. </p>"; } } ?> El contenido de la pgina sigue siendo el mismo que en el ejemplo anterior, la diferencia est en la simplificacin del cdigo de la pgina principal.

11

Objetos en PHP por Marco Cajeao

Funciones constructoras.
Definicin de funcin constructora
Una funcin constructora o constructor, es una funcin que podemos llamar al mismo tiempo que instanciamos un objeto. Esta funcin es parecida a cualquier otro mtodo de la clase, con la diferencia de que la podemos llamar cuando instanciamos un objeto. Crear una funcin constructora: Para crear una funcin constructora debemos llamarla de la misma manera que la clase a la que pertenece, por ejemplo si hemos creado la clase: class Herramientas { ... } Dentro de las llaves que definen la clase crearemos la funcin: function Herramientas ($argum1, $argum2, ... $argumN) { ... } Como vemos la funcin puede llevar o no argumentos, y dentro de las llaves podemos indicar las propiedades del objeto mediante la variable $this . Para llamar a una funcin constructora lo haremos en el momento de instanciar el objeto, de la siguiente manera: caja_herramientas = new Herramientas($arg1,arg2, ... argN); Es decir, al instanciar el objeto, le pasamos los argumentos, de manera que desde el mismo momento en que se crea el objeto, este puede tener ya una serie de propiedades, condiciones, o modo de actuar, marcado por la funcin constructora. Una de las utilidades ms frecuentes de la funcin constructora es la de aadir al objeto instanciado las propiedades que queremos que sean distintas a las que tiene por defecto. Esto se hace pasndole los nuevos valores como argumentos, e indicando en la funcin constructora que el objeto debe tener esos nuevos valores.

Ejemplo de funcin constructora


Vamos a ver cmo funciona una funcin constructora con un ejemplo, para ello retomamos el ejemplo de la pgina anterior, donde habamos creado una claseHerramientas. El cdigo de la clase estaba guardado en el archivoclase_herramientas.php. A este cdigo le aadiremos una funcin constructora que define el valor de las propiedades del objeto. estos valores se los pasaremos como argumentos de la funcin. El cdigo de esta pgina quedar as: <?php class Herramientas {

12

Objetos en PHP por Marco Cajeao

var $nombre="sin_nombre"; var $precio=0; var $imagen="objetos/herramientas.gif"; var $descripcion; var $precio_descuento; function descuento($porcentaje) { $rebaja=$this->precio - ($this->precio*($porcentaje/100)); $this->precio_descuento =$rebaja; } function mostrar() { echo "<img src='$this->imagen' alt='$this->nombre' width='200' align='left'>"; echo "<p>Producto: $this->nombre. </p>"; echo "<p>Precio: $this->precio </p>"; if ($this->precio_descuento) { echo "<p>Precio con descuento = $this>precio_descuento.</p>"; } echo "<p>Descripcin: $this->descripcion. </p>"; } function Herramientas ($nomb,$prec,$imag,$desc,$reba) { $this->nombre=$nomb; $this->precio=$prec; $this->imagen=$imag; $this->descripcion=$desc; if ($reba) { $this->descuento($reba);

13

Objetos en PHP por Marco Cajeao

} } } ?> En color morado est resaltada la funcin constructora. El resto del cdigo es el mismo que tenamos en el ejemplo de la pgina anterior. En esta funcin vamos dando al objeto los distintos valores para sus propiedades, los cuales los pasaremos en los argumentos de la funcin. Fjate en el uso de la variable$this para referirnos al propio objeto que instanciamos. Por otra parte en la pgina principal cambiaremos la forma de crear el nuevo objeto, primero definiremos una serie de variables que contienen las propiedades del objeto, y despus se las pasaremos como argumento al instanciar el objeto. En el archivo index.php de este ejemplo, cambiaremos el cdigo que instancia y muestra el objeto por este otro: <?php $nombre="Caja de herramientas tipo 1"; $precio = 60; $imagen = "objetos/herramientas.gif"; $descripcion ="Caja completa de herramientas, 50 piezas calidad buena."; $caja1 = new Herramientas ($nombre,$precio,$imagen,$descripcion,"20"); $caja1->mostrar(); ?> El cdigo se muestra ms sencillo, ya que no tenemos que definir las propiedades, sino que simplemente pasamos como argumento los valores que contienen sus valores. Al pasar los argumentos debemos de tener cuidado de pasarlos en el mismo orden en que estn en la funcin constructora para que cada uno de ellos se corresponda con la propiedad a la que corresponde. Una vez pasados los argumentos, slo tenemos que llamar a la funcin mostrar()para ver en pantalla el objeto.

14

Objetos en PHP por Marco Cajeao

Como ves la pgina es muy similar al del ejemplo anterior, sin embargo tiene la ventaja de que ahora aadir a la pgina un nuevo objeto es mucho ms fcil. Veamos cmo se aade un nuevo objeto a la pgina de nuestro ejemplo, Como en cada objeto ponemos una imagen distinta, en primer lugar guardaremos la imagen que vamos a ponerle al objeto en la subcarpeta objetos, y la llamaremos herramientas2.gif. por si quieres crear el ejemplo a la vez que lo explicamos, la imagen es la siguiente:

Una vez copiada y guardada la imagen modificamos el cdigo php anterior de la pgina index.php, aadindole las siguientes lneas: <?php $nombre="Caja de herramientas tipo 1"; $precio = 60; $imagen = "objetos/herramientas.gif"; $descripcion ="Caja completa de herramientas, 50 piezas calidad buena."; $caja1 = new Herramientas ($nombre,$precio,$imagen,$descripcion,"20"); $caja1->mostrar(); echo "<hr width='80%'/>";

$nombre="Caja de herramientas tipo 2"; $precio =80; $imagen = "objetos/herramientas2.gif"; $descripcion ="Caja herramientas profesional, 70 piezas calidad excelente."; $caja2 = new Herramientas ($nombre,$precio,$imagen,$descripcion,"20");

15

Objetos en PHP por Marco Cajeao

$caja2->mostrar(); ?> Como vemos, la creacin de clases puede ser til en algunas ocasiones, ya que si en principio requiere escribir ms trozo de cdigo, es posible que luego pueda simplificarnos mucho el trabajo.

16

Objetos en PHP por Marco Cajeao

Subclases
Creacin de subclases
Podemos hacer que de una clase de objetos deriven otra serie de clases incluidas en la primera, esto son las subclases, llamadas tambin clases extendidas, o clases derivadas. En ejemplos anteriores hemos usado la clase Herramientas; ahora queremos crear dentro de esta clase dos subclases que sern Manuales y Mecanicas. Al crear estas subclases tenemos que hacer referencia a la clase de la que dependen. esto lo haremos mediante la palabra reservada extends de la siguiente manera: class Manuales extends Herramientas { .. } class Mecanicas extends Herramientas { ... } Con esto hemos creado las dos subclases.

Herencia
Las subclases heredan las propiedades y mtodos que tiene la clase de la cual derivan, por tanto, en nuestro ejemplo, las clases Manuales y Mecnicas Tienen, al ser creadas las mismas propiedades y mtodos que la clase Herramientas, si la claseHerramientas tiene funcin constructora, sta tambin se hereda a las subclases, es decir para instanciar los objetos de las subclases utilizaremos la funcin constructora: $caja1 = Manuales ($arg1,$arg2,$arg3, ... ,$argN); Donde ($arg1,$arg2,$arg3, ... ,$argN) hace referencia a la funcin constructora de la clase principal. La clase principal define por tanto una serie de propiedades y mtodos generales que tendrn todas las subclases. Las propiedades y mtodos particulares de cada subclase los definiremos dentro de las llaves que delimitan el cdigo de la subclase. Nada nos impide crear ms subclases dentro de las subclases que tenemos, de manera que se cree una jerarqua de clases, en la cual cada una hereda todos los mtodos y propiedades de las que deriva.

Polimorfismo
Esta es una cualidad por la cual podemos redefinir las propiedades y mtodos que una subclase ha heredado, de manera que el cambio afecte slo a esa subclase. Con las propiedades, lo que podemos cambiar es el valor por defecto que stas tienen, para ello basta con darles un nuevo valor dentro de la subclase.

17

Objetos en PHP por Marco Cajeao

Con los mtodos, tambin podemos redefinir las funcines de manera que se ajusten a la subclase. Por ejemplo, si tenemos en la clase principal una funcin mostrar() que muestra en pantalla las propiedades del objeto, mostrar simplemente las propiedades comunes a todas las subclases, si queremos mostrar tambin las propiedades especficas debemos redefinir la funcin mostrar() dentro de la subclase.

Ejemplo con subclases


Clase principal. Vamos a ver cmo se aplica todo esto a un ejemplo, partiremos del ejemplo ya dado en pginas anteriores, donde crebamos una clase llamada Herramientas. Partimos de este cdigo PHP el cual habamos guardado en el archivo clase_herramientas.php y el cual es el siguiente: <?php class Herramientas { var $nombre; //En esta lnea y las siguentes creamos las propiedades. var $precio; var $imagen; var $descripcion; var $precio_descuento; function descuento($porcentaje) { // mtodo para calcular el descuento. $rebaja=$this->precio - ($this->precio*($porcentaje/100)); $this->precio_descuento =$rebaja; } function mostrar() { //mtodo que muestra las propiedades en pantalla. echo "<img src='$this->imagen' alt='$this->nombre' height='200' align='left'>"; echo "<p>Producto: $this->nombre. </p>"; echo "<p>Precio: $this->precio </p>"; if ($this->precio_descuento) { echo "<p>Precio con descuento = $this>precio_descuento.</p>"; }

18

Objetos en PHP por Marco Cajeao

echo "<p>Descripcin: $this->descripcion. </p>"; } function Herramientas ($nomb,$prec,$imag,$desc,$reba) { //funcin constructora. $this->nombre=$nomb; $this->precio=$prec; $this->imagen=$imag; $this->descripcion=$desc; if ($reba) { $this->descuento($reba); } } } ?> Mediante comentarios hemos diferenciado las distintas partes del cdigo, en primer lugar creamos las propiedades, y despus definimos los distintos mtodos, (para calcular descuento y mostrar en pantalla); por ltimo creamos la funcin constructora. Como derivadas de la clase herramientas crearemos dos subclases, que llamaremos Manuales y Mecnicas.

Creacin de una subclase


Empezaremos por crear la subclase Manuales, para ello cremos una clase distinta, en la que hacemos referencia a la clase de la que deriva mediante la palabra reservada extends, debajo del cdigo de la clase Herramientas empezaremos a escribir el cdigo de la nueva clase: class Manuales extends Herramientas { } Este cdigo no est incluido dentro de las llaves de la clase Herramientas, sino que es independiente de l, la relacin entre las dos clases se da por la palabra extends. Nosotros lo escribimos a continuacin del cdigo de la clase Herramientas, pero en realidad podramos escribirlo en cualquier lugar posterior a la creacin de la clase principal.

19

Objetos en PHP por Marco Cajeao

Crear propiedades.
La clase Manuales hereda las propiedades de la clase principal (Herramientas), por lo que de entrada ya tiene todas las propiedades de la clase Herramientas, sin embargo queremos aadirle, ms propiedes. para ello dentro de las llaves que delimitan el cdigo de la clase Manuales escribimos lo siguiente: var $clase; var $peso; Con esto ya hemos aadido las propiedades especficas de la esta subclase.

Modificar mtodos
La subclase Manuales ha heredado tambin los mtodos de la clase principal, por lo que podemos usarlos tambin en esta subclase. El mtodo mostrar de la clase principal, al aplicarlo a esta subclase, nos mostrar slamente las propiedades que estn definidas en la clase principal, pero no nos muestra las propiedades especficas que hemos definido para esta subclase. Si queremos que nos muestre tanto las propiedades comunes como las especficas, debemos reescribir el mtodo dentro de las llaves que delimitan la subclase, de manera que indique que debe mostrar todas las propiedades. Por lo tanto debemos crear dentro de la subclase Manuales una funcin llamada tambin mostrar(), que sustituir a la funcin del mismo nombre de la clase principal. function mostrar() { }; Como la funcin pretende mostrar tanto las propiedades comunes como las especficas, esta funcin en realidad ser una copia de la funcin de la clase principal a la que se le ha aadido el cdigo necesario para mostrar las propiedades especficas. Por lo tanto dentro de las llaves de la funcin, en primer lugar deberamos reescribir el cdigo de la funcin del mismo nombre de la clase principal. Para evitar reescribir el cdigo podemos utilizar una llamada a esta funcin, pero indicando que la funcin est en el elemento de nivel superior. Esto se hace mediante el siguiente cdigo: parent::mostrar(); Este simple cdigo llama a la funcin mostrar de la clase Herramientas y nos evita tener que reescribir su cdigo. A continuacin, escribiremos el cdigo para mostrar en pantalla las propiedades especficas: echo "<p>Clase: $this->clase</p>"; echo "<p>Peso: $this->peso Kg.</p>";

20

Objetos en PHP por Marco Cajeao

Por lo tanto la funcin mostrar() de la subclase Manuales quedar de la siguiente manera: function mostrar() { parent::mostrar(); echo "<p>Clase: $this->clase</p>"; echo "<p>Peso: $this->peso Kg.</p>"; }

Modificar la funcin constructora


De igual modo, la funcin constructora de la clase principal, slo nos inicializa las propiedades comunes, pero no las especficas, por lo tanto debemos crear una funcin constructora para la subclase Manuales, que incluya el cdigo de la funcin constructora de la clase principal, y adems el cdigo especfico para inicializar las propiedades especficas de la subclase. El procedimiento es similar al que hemos utilizado para modificar el mtodomostrar(), vamos a ver el cdigo y luego comentamos las diferencias: function Manuales ($nomb,$prec,$imag,$desc,$reba,$cla,$pes) { parent::Herramientas ($nomb,$prec,$imag,$desc,$reba); $this->clase=$cla; $this->peso=$pes; } La funcin constructora lleva el nombre de la subclase a la que pertenece, y adems debe llevar todos los argumentos que hay que pasarle, tanto de las propiedades comunes como de las especficas, stos ltimos se ponen a continuacin de los comunes. Llamamos a la funcin constructora principal mediante la palabra reservada parent::, tal como hacamos con los otros mtodos, la funcin constructora se llama como en la clase principal, ya que es sta a la que llamamos. Por otra parte indicamos tambin aqu los argumentos de las propiedades comunes, que se pasan a travs del constructor principal. Por ltimo ponemos el cdigo especfico que permitir dar valor a las propiedades especficas de la subclase. Las propiedades toman el valor de los parmetros correspondientes a las propiedades especficas.

Cdigo completo de la subclase.


Mostramos a continuacin el cdigo completo de la subclase Manuales.

21

Objetos en PHP por Marco Cajeao

class Manuales extends Herramientas { var $clase; var $peso; function mostrar() { parent::mostrar(); echo "<p>Clase: $this->clase</p>"; echo "<p>Peso: $this->peso Kg.</p>"; } function Manuales ($nomb,$prec,$imag,$desc,$reba,$cla,$pes) { parent::Herramientas ($nomb,$prec,$imag,$desc,$reba); $this->clase=$cla; $this->peso=$pes; } }

Mostrar resultado en la pgina principal


En la pgina principal de nuestro ejemplo (index.php), instanciaremos un objeto de esta clase y lo mostraremos, para ello utilizaremos el siguiente cdigo PHP, el cual sustituir al que tenamos en el ejemplo de pginas anteriores: <?php $nombre="Caja de herramientas tipo 1"; $precio = 60; $imagen = "objetos/herramientas.gif"; $descripcion ="Caja completa de herramientas, 50 piezas calidad buena."; $descuento = "20"; $miclase = "Bsicas"; $mipeso = "5"; $caja1 = new Manuales ($nombre,$precio,$imagen,$descripcion,$descuento,$miclase,$mipeso);

22

Objetos en PHP por Marco Cajeao

$caja1->mostrar(); echo "<hr ?> En este cdigo primero definimos las variables que vamos a pasar como argumentos a la funcin constructora, y luego instanciamos el objeto, indicndole los argumentos que servirn para cfrear las propiedades. Por ltimo mediante la funcin mostrar, nos muestra en pantalla el objeto y sus propiedades. width='80%'/>";

Crear una segunda subclase


Siguiendo los mismos pasos que hemos dado anteriormente, podemos crear una segunda subclase para las herramientas mecnicas, y que llamaremos Mecanica El cdigo PHP para crear esta segunda subclase es muy similar al de la anterir y ser el siguiente: class Mecanicas extends Herramientas { var $tipo; var $consumo; function mostrar() { parent::mostrar(); echo "<p>Tipo: $this->tipo</p>"; echo "<p>Consumo: $this->consumo</p>"; } function Mecanicas ($nomb,$prec,$imag,$desc,$reba,$tip,$cons) { parent::Herramientas ($nomb,$prec,$imag,$desc,$reba); $this->tipo=$tip; $this->consumo=$cons; } A continuacin, para poder mostrar el resultado, en la pgina principal, aadiremos el siguiente cdigo que instancia e inicializa un objeto de esta subclase: $nombre="Cortasetos"; $precio = 200;

23

Objetos en PHP por Marco Cajeao

$imagen = "objetos/cortasetos.gif"; $descripcion ="cortasetos mecnico"; $descuento = "20"; $tipo = "Motor gasolina"; $consumo = "0.2 l/h."; $cortaset = new Mecanicas ($nombre,$precio,$imagen,$descripcion,$descuento,$tipo,$consumo); $cortaset->mostrar();

En el anexo mostramos los cdigos completos de las pginas de este ejemplo

24

Objetos en PHP por Marco Cajeao

Anexo
Cdigo de la pgina clase_herramientas.php
<?php class Herramientas { //clase principal var $nombre; //Propiedades comunes en esta lnea y las siguientes. var $precio; var $imagen; var $descripcion; var $precio_descuento; function descuento($porcentaje) { //mtodo que calcula el procentaje $rebaja=$this->precio - ($this->precio*($porcentaje/100)); $this->precio_descuento =$rebaja; } function mostrar() { //mtodo para ver las propiedades comunes en pantalla. echo "<img src='$this->imagen' alt='$this->nombre' height='200' align='left'>"; echo "<p>Producto: $this->nombre. </p>"; echo "<p>Precio: $this->precio </p>"; if ($this->precio_descuento) { echo "<p>Precio con descuento = $this>precio_descuento.</p>"; } echo "<p>Descripcin: $this->descripcion. </p>"; }

25

Objetos en PHP por Marco Cajeao

function Herramientas ($nomb,$prec,$imag,$desc,$reba) { //funcin constructora. $this->nombre=$nomb; $this->precio=$prec; $this->imagen=$imag; $this->descripcion=$desc; if ($reba) { $this->descuento($reba); } } } class Manuales extends Herramientas { //subclase "Manuales". var $clase; //Propiedades especficas de la subclase. var $peso; function mostrar() { //modificar mtodo mostrar para esta subclase. parent::mostrar(); echo "<p>Clase: $this->clase</p>"; echo "<p>Peso: $this->peso Kg.</p>"; } function Manuales ($nomb,$prec,$imag,$desc,$reba,$cla,$pes) { Constructor para esta subclase. parent::Herramientas ($nomb,$prec,$imag,$desc,$reba); $this->clase=$cla; $this->peso=$pes; } } class Mecanicas extends Herramientas { //Subclase "Mecanicas".

26

Objetos en PHP por Marco Cajeao

var $tipo; //Propiedades especficas de la subclase. var $consumo; function mostrar() { //modificar mtodo mostrar para esta subclase. parent::mostrar(); echo "<p>Tipo: $this->tipo</p>"; echo "<p>Consumo: $this->consumo</p>"; } function Mecanicas ($nomb,$prec,$imag,$desc,$reba,$tip,$cons) { Constructor para esta subclase. parent::Herramientas ($nomb,$prec,$imag,$desc,$reba); $this->tipo=$tip; $this->consumo=$cons; } } ?>

27

Objetos en PHP por Marco Cajeao

Cdigo de la pgina index.php


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html> <head> <title>Herramientas</title> <?php include("clase_herramientas.php"); //incluir cdigo de creacin de clases. ?> </head> <body> <h1>Herramientas</h1> <?php //objeto de subclase "Manuales": valor de propiedades $nombre="Caja de herramientas tipo 1"; $precio = 60; $imagen = "objetos/herramientas.gif"; $descripcion ="Caja completa de herramientas, 50 piezas calidad buena."; $descuento = "20"; $miclase = "Bsicas"; $mipeso = "5"; //instanciar e inicializar objeto. $caja1 = new Manuales ($nombre,$precio,$imagen,$descripcion,$descuento,$miclase,$mipeso); $caja1->mostrar(); //mostrar en pantalla.

28

Objetos en PHP por Marco Cajeao

echo "<hr

width='80%'/>";

//lnea de separacin.

//objeto de subclase "Mecanicas": valor de propiedades $nombre="Cortasetos"; $precio = 200; $imagen = "objetos/cortasetos.gif"; $descripcion ="cortasetos mecnico"; $descuento = "20"; $tipo = "Motor gasolina"; $consumo = "0.2 l/h."; //instanciar e inicializar objeto. $cortaset = new Mecanicas ($nombre,$precio,$imagen,$descripcion,$descuento,$tipo,$consumo); $cortaset->mostrar(); //mostrar en pantalla. ?> </body> </html>

29

Objetos en PHP por Marco Cajeao

Referencias
http://es.wikipedia.org/wiki/POO http://www.phpya.com.ar/poo/ http://phpbasico.freevar.com/ http://www.zonaphp.com/programacion-orientada-a-objetos-en-php/ http://www.programacionweb.net/articulos/articulo/?num=158 http://www.maestrosdelweb.com/editorial/programacion-orientada-a-objetos-en-php5/ http://www.webestilo.com/php/articulo.phtml?art=27

30

Objetos en PHP por Marco Cajeao

Anda mungkin juga menyukai