Curso PHP orientado a objetos – Sobrecarga

Otro concepto importante de la orientación a objetos es la sobrecarga de funciones. En lenguajes que no permiten la sobrecarga debemos definir dos métodos distintos (con nombre distinto) para poder trabajar con dos funciones que hacen lo mismo, pero reciben distintos tipos de datos. La sobrecarga es muy importante para el constructor ya que normalmente tendremos distintas formas de crear la clase.

En PHP no existen las sobrecargas como tal. Sin embargo, existen mecanismos para imitarla. Como ya he dicho, la sobrecarga es muy importante en el caso del constructor, así que haremos el ejemplo siguiente, sobrecargando esta función.

El mecanismo que seguimos para imitar a la sobrecarga es usar los atributos opcionales. Imaginad que queremos tener dos constructores distintos:

  • Usuario(id, nombre, apellidos, códigoPostal): Recibe los cuatro valores y los inicializa.
  • Usuario(nombre, apellidos, códigoPostal): Recibe los tres valores, los inicializa y el identificador también lo inicializa pero de forma aleatoria (o viendo cuál le corresponde si trabajáramos con una base de datos).

La implementación, sería tal como indicamos a continuación (tenemos que poner el parámetro $id al final para poder jugar con los atributos opcionales):

function __construct($nombre, $apellidos, $codigoPostal, $id = 0)
{
	if($id != 0)
	{
		$this->id = $id;
		$this->nombre = $nombre;
		$this->apellidos = $apellidos;
		$this->codigoPostal = $codigoPostal;
	}
	else
	{
		$this->id = rand(0,100);
		$this->nombre = $nombre;
		$this->apellidos = $apellidos;
		$this->codigoPostal = $codigoPostal;
	}
}

Al poner el identificador al final, igualado a cero en la declaración, lo que le estamos diciendo al compilador es que:

  • Si se llama con tres argumentos, el valor del identificador lo iguale a cero y por lo tanto entre en la parte inferior de la condición, donde se calcula el identificador aleatorio.
  • Si se llama con cuatro argumentos, el identificador tomará el valor que el usuario le pase y por lo tanto funcionará como lo ha hecho hasta ahora.Veamos un par de ejemplos de invocación de este constructor.
$usuario_1 = new Usuario("José", "Gómez Martínez", 14004);
$usuario_2  = new Usuario("José", "Gómez Martínez", 14004, 10);

Ambas sentencias son válidas, la primera asigna un identificador aleatorio y la segunda, asigna el identificador igual a 10.

Author Description

F. Javier Carazo Gil

Casi Ingeniero Informático, co-fundador y administrador de Linux Hispano, además de desarrollar software y mantener sistemas en el CSIC, hace poco he fundado junto con Alberto Hornero una start-up: CODECTION donde trabajamos con software libre. Puedes saber más sobre mí, mi vida laboral, mis libros, mis artículos y mi día a día en @fjcarazo y en mi perfil público de LinkedIn.

  • Pingback: Bitacoras.com()

  • javier parra

    gracias, por esta nueva entrada del curso

    salu2

  • @javier parra: Mañana o a lo largo del fin de semana habrá otro. Esperemos que a Google también le guste y nos referencie bien alto :)

  • MontoGeek

    Muy buenos los tutoriales, pero no sé como implementarlos, es decir, donde escribir el código y donde invocarlo, o donde escribir las clases, ¿Dentro del body O qué?
    Muchas Gracias.

  • javier parra

    @MontoGeek

    el codigo php va dentro del body la etiqueta de principio del codigo php es <?php y la de cierre <?

    el codigo php es codigo del lado del servidor el servidor se encarga de procesar el codigo y devolver una pagina html o xhtml.

    El codigo php va mezclado entre el codigo html.

    Programas para crear paginas en codigo php tienes el gedti o el bluefish en linux entre otros y en windows el bloc de notas, el notepad ++, o el bluefish tambien.

    Las páginas con codigo php tienen que tener la extension php

    Espero haberte ayudado

  • @MontoGeek: Es justo como dice javier parra.

    @javier parra: Mil gracias por tu ayuda :)

  • javier parra

    @Carazo de nada para eso estamos

    Por cierto hay una errata el editor de texto en linux es gedit y no gedti como dije.

    Y se me olvidó comentar que para probar paginas php sin subirlas a internet, ya sea servidor comprado propio, servidor compartido o servidor gratuito compartido, puedes usar apache tanto en windows como en gnu/linux y si necesitas de un gestor de bases de datos para tus paginas php puedes usar el mysql que está tanto para windows como para gnu/linux.

    Para las personas novatas, a lo mejor es cuesta configurar apache con mysql para que funcione correctamente, para ello existe en gnu/linux el LAMP y en windows el WAMP o el easyphp el que mas te guste, y esos incorporan ya el apache, mysql y phpmyadmin, y lo configura el solo para que los programas se comuniquen entre sí.

    El phpmyadmin permite una gestion grafica de las bases de datos que tengamos creadas.

    Un saludo

    javier

  • Pingback: Eliminar warning y errores típicos en PHP | Linux Hispano()

  • Hola yo queria saber si a partir de php 6 existe la posibilidad de sobrecarga de metodos en php o si se esta pensando en incorporar esa funcionalidad.

    Saludos
    Gracias

  • Pingback: ¿Cómo crear tu propio shortcode en WordPress? | Linux Hispano()

  • Pingback: Parámetros opcionales en funciones de JavaScript | Linux Hispano()