Entendido.

Este sitio utiliza cookies para analizar la navegación. Si continúa navegando se entiende que acepta su uso. Ver más detalles.";

Logo

Aprende Web

Crea y diseña tus sitios en la Web.

Manual de PHP

PHP: imprescindible para crear páginas web de modo profesional


Y ahora tambien aprende a programar en C++ con Aprende Web C++

logo rss RSS. Suscribir canal.

Buscar en Aprende Web

Traducir página

Visita nuestro blog:

bolg.aprende-web.net

y entérate de las novedades o deja un comentario.

Dudas y sugerencias:

aprendeweb@aprende-web.net





Sobre ésta página

Ültima modificación: 29-01-2016.

Visitas este mes: 140

Visitas el mes pasado: 128

logo
WEB-GRAFÍA

Mi agradecimiento a los siguientes sitios en los que me he basado para la elaboración de este manual.:

Curso de PHP
www.programaciónweb.net
Lecciones PHP
WebTaller.com
Manual de PHP
manualdephp.com
Curso de PHP
Aula Fácil.com
Manual de PHP en español
manual-php.com
PHP a fondo
desarrolloweb.com
Manual de PHP
Foros del Web
Manual de PHP
www.php.net
PHP Tutorial
w3schools.com

Donativos

Si este sitio te parece interesante puedes contribuir con una pequeña aportación.




15. Objetos en PHP (IV)

15.4 Subclases

php

Creación de subclases

Podemos hacer que de una clase de objetos deriven otra serie de clases incluidas en la primera, esto son las subclases, llamadas también clases extendidas, o clases derivadas.

En ejemplos anteriores hemos usado la clase Herramientas; ahora queremos crear dentro de esta clase dos subclases que serán 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 métodos que tiene la clase de la cual derivan, por tanto, en nuestro ejemplo, las clases Manuales y Mecanicas Tienen, al ser creadas las mismas propiedades y métodos que la clase Herramientas, si la clase Herramientas tiene función constructora, ésta también se hereda a las subclases, es decir para instanciar los objetos de las subclases utilizaremos la función constructora:

$caja1 = Manuales ($arg1,$arg2,$arg3, ... ,$argN);

Donde ($arg1,$arg2,$arg3, ... ,$argN) hace referencia a la función constructora de la clase principal.

La clase principal define por tanto una serie de propiedades y métodos generales que tendrán todas las subclases. Las propiedades y métodos particulares de cada subclase los definiremos dentro de las llaves que delimitan el código de la subclase.

Nada nos impide crear más subclases dentro de las subclases que tenemos, de manera que se cree una jerarquía de clases, en la cual cada una hereda todos los métodos y propiedades de las que deriva.


Polimorfismo

Esta es una cualidad por la cual podemos redefinir las propiedades y métodos que una subclase ha heredado, de manera que el cambio afecte sólo 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.

Con los métodos, también podemos redefinir las funciónes de manera que se ajusten a la subclase. Por ejemplo, si tenemos en la clase principal una función mostrar() que muestra en pantalla las propiedades del objeto, mostrará simplemente las propiedades comunes a todas las subclases, si queremos mostrar también las propiedades específicas debemos redefinir la función mostrar() dentro de la subclase.


Ejemplo con subclases


Clase principal.

Vamos a ver cómo se aplica todo esto a un ejemplo, partiremos del ejemplo ya dado en páginas anteriores, donde creábamos una clase llamada Herramientas. Partimos de este código PHP el cual habíamos guardado en el archivo clase_herramientas.php y el cual es el siguiente:

 <?php  
class Herramientas {
var $nombre; //En esta línea y las siguentes creamos las propiedades.
var $precio;
var $imagen;
var $descripcion;
var $precio_descuento;
function descuento($porcentaje) { // método para calcular el descuento.
         $rebaja=$this->precio - ($this->precio*($porcentaje/100));
         $this->precio_descuento =$rebaja;
         }
function mostrar() { //método 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>"; 
            }
            echo "<p>Descripción: $this->descripcion. </p>";
         }	
function Herramientas ($nomb,$prec,$imag,$desc,$reba) { //función 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 código, en primer lugar creamos las propiedades, y después definimos los distintos métodos, (para calcular descuento y mostrar en pantalla); por último creamos la función constructora.

Como derivadas de la clase herramientas crearemos dos subclases, que llamaremos Manuales y Mecánicas.


Creación de una subclase

Empezaremos por crear la subclase Manuales, para ello creamos una clase distinta, en la que hacemos referencia a la clase de la que deriva mediante la palabra reservada extends, debajo del código de la clase Herramientas empezaremos a escribir el código de la nueva clase:

class Manuales extends Herramientas { }

Este código no está incluido dentro de las llaves de la clase Herramientas, sino que es independiente de él, la relación entre las dos clases se da por la palabra extends. Nosotros lo escribimos a continuación del código de la clase Herramientas, pero en realidad podríamos escribirlo en cualquier lugar posterior a la creación de la clase principal.


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 añadirle, más propiedades. para ello dentro de las llaves que delimitan el código de la clase Manuales escribimos lo siguiente:

var $clase;

var $peso;

Con esto ya hemos añadido las propiedades específicas de la esta subclase.


Modificar métodos

La subclase Manuales ha heredado también los métodos de la clase principal, por lo que podemos usarlos también en esta subclase.

El método mostrar de la clase principal, al aplicarlo a esta subclase, nos mostrará sólamente las propiedades que están definidas en la clase principal, pero no nos muestra las propiedades específicas que hemos definido para esta subclase. Si queremos que nos muestre tanto las propiedades comunes como las específicas, debemos reescribir el método 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 función llamada también mostrar(), que sustituirá a la función del mismo nombre de la clase principal.

function mostrar() { };

Como la función pretende mostrar tanto las propiedades comunes como las específicas , esta función en realidad será una copia de la función de la clase principal a la que se le ha añadido el código necesario para mostrar las propiedades específicas.

Por lo tanto dentro de las llaves de la función, en primer lugar deberíamos reescribir el código de la función del mismo nombre de la clase principal. Para evitar reescribir el código podemos utilizar una llamada a esta función, pero indicando que la función está en el elemento de nivel superior. Esto se hace mediante el siguiente código:

parent::mostrar();

Este simple código llama a la función mostrar de la clase Herramientas y nos evita tener que reescribir su código.

A continuación, escribiremos el código para mostrar en pantalla las propiedades específicas:

echo "<p>Clase: $this->clase</p>";

echo "<p>Peso: $this->peso Kg.</p>";

Por lo tanto la función 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 función constructora

De igual modo, la función constructora de la clase principal, sólo nos inicializa las propiedades comunes, pero no las específicas, por lo tanto debemos crear una función constructora para la subclase Manuales, que incluya el código de la función constructora de la clase principal, y además el código específico para inicializar las propiedades específicas de la subclase.

El procedimiento es similar al que hemos utilizado para modificar el método mostrar(), vamos a ver el código 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 función constructora lleva el nombre de la subclase a la que pertenece, y además debe llevar todos los argumentos que hay que pasarle, tanto de las propiedades comunes como de las específicas, éstos últimos se ponen a continuación de los comunes.

Llamamos a la función constructora principal mediante la palabra reservada parent::, tal como hacíamos con los otros métodos, la función constructora se llama como en la clase principal, ya que es ésta a la que llamamos. Por otra parte indicamos también aquí los argumentos de las propiedades comunes, que se pasan a través del constructor principal.

Por último ponemos el código específico que permitirá dar valor a las propiedades específicas de la subclase. Las propiedades toman el valor de los parámetros correspondientes a las propiedades específicas.


Código completo de la subclase.

Mostramos a continuación el código completo de la subclase Manuales.

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 página principal

En la página principal de nuestro ejemplo (index.php), instanciaremos un objeto de esta clase y lo mostraremos, para ello utilizaremos el siguiente código PHP, el cual sustituirá al que teníamos en el ejemplo de páginas 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 = "Básicas";
$mipeso = "5";
$caja1 = new Manuales ($nombre,$precio,$imagen,$descripcion,$descuento,$miclase,$mipeso);
$caja1->mostrar();
echo "<hr  width='80%'/>"; 
?>

En este código primero definimos las variables que vamos a pasar como argumentos a la función constructora, y luego instanciamos el objeto, indicándole los argumentos que servirán para crear las propiedades. Por último mediante la función mostrar, nos muestra en pantalla el objeto y sus propiedades.

La página principal que nos muestra el objeto nos quedará como en el siguiente enlace:

Subclases I



Crear una segunda subclase

Siguiendo los mismos pasos que hemos dado anteriormente, podemos crear una segunda subclase para las herramientas mecánicas, y que llamaremos Mecanica.

El código PHP para crear esta segunda subclase es muy similar al de la anteriór 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 continuación, para poder mostrar el resultado, en la página principal, añadiremos el siguiente código que instancia e inicializa un objeto de esta subclase:

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

Por supuesto hemos guardado anteriormente la imagen correspondiente a este objeto en la carpeta objetos. La página index.php quedará como en el siguiente enlace:

Subclases II


En los siguientes enlaces mostramos los códigos completos de las páginas de este ejemplo

Código de la página clase_herramientas.php

Codigo de clase_herramientas.php


Código de la página index.php

Codigo de index.php





Aquí acaba el manual de PHP básico. Espero que os haya servido para iniciaros en el diseño profesional de páginas.

Incluimos en el manual un último tema donde hacemos un resumen de lo que hemos visto.

Resumen PHP

Podemos seguir ampliando nuestros conocimientos sobre el diseño y programación web en las secciones de "Nuevas tendencias" y "Programación".



manual de PHP

Anterior siguiente ... Siguiente siguiente


imprimir esta página

Página creada por ANYELGUTI.

Sugerencias: aprendeweb@aprende-web.net. Envia un manda un correo

Visita nuestro blog par saber en qué estamos trabajando: Aprende Web Blog

Más sobre anyelguti en http://anyelguti.16mb.com