Inicio > PHP > Sobrecarga de funciones

SOBRECARGA DE FUNCIONES

11/06/2017PHP

 

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.