Blog de Gonzalo

Sobrecarga de funciones

En la teoría de objetos existe el concepto de sobrecarga de funciones que consiste en poder definir varias funciones con el mismo nombre pero con diferente número y/o tipo de parámetros y dependiendo de ellos se ejecutará una función u otra.
Aunque en php hay que emularlo no está definido como tal. Según la documentación de php se hace de la siguiente manera:

  • Todos los métodos sobrecargados deben definirse como public.
  • No se puede pasar ninguno de los parámetros de estos métodos mágicos por referencia.
La interpretación de php de overloading es diferente de la mayoría de los lenguajes orientados a objetos.Voy a poner un ejemplo bastante sencillito para que se entienda como se hace la sobrecarga de funciones:
class SobreCarga {
function __call($metodo, $params) {
$accepted_methods = array('pruebas');
if(!in_array($method_name, $accepted_methods)) {
trigger_error('El método '.$metodo.' no existe', E_USER_ERROR);
}

$total_params = count($params);
if($total_params == 0) {
$this->Pruebas1();
} elseif($total_params == 1) {
$this->Pruebas2($params[0]);
} elseif($total_params == 2) {
$this->Pruebas3($params[0], $params[1]);
} else {
return false;
}
}

function Pruebas1() {
echo 'Hola';
}

function Pruebas2($nombre){
echo 'Hola ' . $nombre;
}
function Pruebas3($nombre, $apellido){
echo 'Hola ' . $nombre.' '. $apellido;
}
}

$ob = new Pruebas();
$ob->Pruebas();
$ob->Pruebas ('Gonzalo');
$ob->Pruebas ('Gonzalo', 'López');

En otros lenguajes como Java está mejor planteadola sobrecarga de funciones, espero que en las versiones posteriores de php lo solucionen.