PHP significa preprocesador de hipertexto, es un popular lenguaje de secuencias de comandos de propósito general que se utiliza principalmente en el desarrollo web. Es rápido, flexible y pragmático, y las últimas versiones de PHP están orientadas a objetos, lo que significa que puede escribir clases, usar herencia, polimorfismo, abstracción de datos, encapsulación, constructor, destructor y sobrecarga (método y función).
Sobrecarga : la sobrecarga es un concepto orientado a objetos en el que dos o más métodos tienen el mismo nombre de método con diferentes argumentos o parámetros (obligatorio) y tipo de retorno (no necesario). Se puede hacer como sobrecarga de constructores, sobrecarga de operadores y sobrecarga de métodos.
En este artículo, implementaremos la sobrecarga de métodos en PHP.
Sobrecarga de métodos en PHP:
Ejemplo: el siguiente código mostrará algún error.
PHP
<?php class GFG { function multiply($var1){ return $var1; } function multiply($var1,$var2){ return $var1 * $var1 ; } } $ob = new GFG(); $ob->multiply(3,6); ?>
Salida: el error se muestra porque estamos redeclarando la función multiplicar() en la clase GFG.
PHP Fatal error: Cannot redeclare GFG::multiply()
Nota: En otros lenguajes de programación como C++, esto funcionará para métodos sobrecargados. Para lograr la sobrecarga de métodos en PHP, tenemos que utilizar los métodos mágicos de PHP __call() para lograr la sobrecarga de métodos.
__call(): en PHP, si una clase ejecuta __call() , y si se llama a un objeto de esa clase con un método que no existe, se llama a __call() en lugar de ese método. El siguiente código demuestra esto.
Ejemplo:
PHP
<?php class GFG { public function __call($member, $arguments) { $numberOfArguments = count($arguments); if (method_exists($this, $function = $member.$numberOfArguments)) { call_user_func_array(array($this, $function), $arguments); } } private function multiply($argument1) { echo $argument1; } private function multiply2($argument1, $argument2) { echo $argument1 * $argument2; } } $class = new GFG; $class->multiply(2); $class->multiply(5, 7); ?>
Producción:
35