¿Quién te dijo que PHP no admite la sobrecarga de funciones?
En realidad, PHP admite la sobrecarga de funciones, pero de una manera diferente. Las características de sobrecarga de PHP son diferentes de las de Java:
La interpretación de PHP de "sobrecarga" es diferente a la mayoría de los lenguajes orientados a objetos. La sobrecarga tradicionalmente proporciona la capacidad de tener múltiples métodos con el mismo nombre pero diferentes cantidades y tipos de argumentos.
Verifique los siguientes bloques de código.
Función para encontrar la suma de n números:
function findSum() {
$sum = 0;
foreach (func_get_args() as $arg) {
$sum += $arg;
}
return $sum;
}
echo findSum(1, 2), '<br />'; //outputs 3
echo findSum(10, 2, 100), '<br />'; //outputs 112
echo findSum(10, 22, 0.5, 0.75, 12.50), '<br />'; //outputs 45.75
Función para agregar dos números o para concatenar dos cadenas:
function add() {
//cross check for exactly two parameters passed
//while calling this function
if (func_num_args() != 2) {
trigger_error('Expecting two arguments', E_USER_ERROR);
}
//getting two arguments
$args = func_get_args();
$arg1 = $args[0];
$arg2 = $args[1];
//check whether they are integers
if (is_int($arg1) && is_int($arg2)) {
//return sum of two numbers
return $arg1 + $arg2;
}
//check whether they are strings
if (is_string($arg1) && is_string($arg2)) {
//return concatenated string
return $arg1 . ' ' . $arg2;
}
trigger_error('Incorrect parameters passed', E_USER_ERROR);
}
echo add(10, 15), '<br />'; //outputs 25
echo add("Hello", "World"), '<br />'; //outputs Hello World
Enfoque orientado a objetos, incluida la sobrecarga de métodos:
La sobrecarga en PHP proporciona medios para "crear" dinámicamente propiedades y métodos. Estas entidades dinámicas se procesan mediante métodos mágicos que uno puede establecer en una clase para varios tipos de acciones.
Ref: http://php.net/manual/en/language.oop5.overloading.php
En PHP, medios sobrecarga puede agregar miembros de objetos en tiempo de ejecución, mediante la implementación de algunos de los métodos mágicos como __set
, __get
, __call
etc.
class Foo {
public function __call($method, $args) {
if ($method === 'findSum') {
echo 'Sum is calculated to ' . $this->_getSum($args);
} else {
echo "Called method $method";
}
}
private function _getSum($args) {
$sum = 0;
foreach ($args as $arg) {
$sum += $arg;
}
return $sum;
}
}
$foo = new Foo;
$foo->bar1(); // Called method bar1
$foo->bar2(); // Called method bar2
$foo->findSum(10, 50, 30); //Sum is calculated to 90
$foo->findSum(10.75, 101); //Sum is calculated to 111.75