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.
class sobreCarga {
function __call($metodo, $params) {
$accepted_methods = array('pruebas');
if(!in_array($metodo, $accepted_methods)) {
trigger_error('El método '.$metodo.' no existe', E_USER_ERROR);
}
$total_params = count($params);
switch ($total_params) {
case 0:
$this->Pruebas1();
break;
case 1:
$this->Pruebas2($params[0]);
break;
case 2:
$this->Pruebas3($params[0], $params[1]);
break;
}
}
function Pruebas1() {
echo 'Hola';
}
function Pruebas2($nombre){
echo 'Hola ' . $nombre;
}
function Pruebas3($nombre, $apellido){
echo 'Hola ' . $nombre.' '. $apellido;
}
}
En otros lenguajes como Java está mejor planteada la sobrecarga de funciones, espero que en las versiones posteriores de php lo solucionen.