Definición
Una característica útil en el Programación Orientada a Objetos es la sobrecarga (overload) –Evitar confundir con sobrescritura (overriding), que consiste en una nueva implementación en los métodos de una clase hija con respecto a los de su clase padre.
En este caso la sobrecarga dicta que un objeto puede contener varios métodos nombrados de la misma forma, la diferencia consiste en el número de argumentos. Esto en PHP no es posible.
<?php class Prueba { public static function saludar() { echo 'Hola'; } public static function saludar($argumento) { echo 'Hola ', $argumento; } } /* PHP Fatal error: Cannot redeclare Prueba::saludar() in... */ ?>
Soluciones
Emular la sobrecarga puede tomar muchos caminos y todos aceptables.
Valores por defecto
En este caso se colocan argumentos con valores por defecto.
<?php class Prueba { public static function saludar($argumento = null) { if ($argumento == null) echo 'Hola'; else echo 'Hola ', $argumento; } } Prueba::saludar(); Prueba::saludar('mundo'); ?>
Funciones varíadicas
Estas nos permiten utilizan argumentos múltiples en una sola implementación.
<?php class Prueba { public static function saludar() { $argumentos = func_get_args(); $numeroArgs = count($argumentos); if ($numeroArgs == 0) echo 'Hola'; else if ($numeroArgs == 1) echo 'Hola ', $argumentos[0]; } } Prueba::saludar(); Prueba::saludar('mundo'); ?>
Método __call()
Es posible usar __call y realizar una serie de tratamientos para construir o desviar las llamadas a métodos. Esto fue visto en la sección Sobrecarga con el método __call.