如何在PHP中实现方法重载?


如何在PHP中实现方法重载?

PHP代表超文本预处理器,它是一种流行的通用脚本语言,主要用于 Web 开发。它快速、灵活、实用,最新版本的PHP是面向对象的,这意味着您可以编写类、使用继承、多态、数据抽象、封装、构造函数、析构函数以及重载(方法和函数)。

重载重载是一个面向对象的概念,其中两个或多个方法具有相同的方法名称,但具有不同的参数或参数(强制)和返回类型(非必需)。它可以通过构造函数重载、运算符重载和方法重载来完成。
在本文中,我们将在PHP中实现方法重载。

PHP中的方法重载:

示例:给出以下代码将显示一些错误。

PHP
<?php
  
class GFG {
    function multiply($var1){
        return $var1;
    }
      
    function multiply($var1,$var2){
        return $var1 * $var1 ;
    }
}
  
$ob = new GFG();
$ob->multiply(3,6);
?>


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);
  
?>


输出:显示错误是因为我们在 GFG 类中重新声明了函数multiply()

PHP Fatal error:  Cannot redeclare GFG::multiply()

注意:在 C++ 等其他编程语言中,这适用于重载方法。为了在PHP中实现方法重载,我们必须利用 PHP 的神奇方法__call()来实现方法重载。

__call():在PHP中,如果一个类执行__call() ,并且如果该类的对象使用不存在的方法调用,则调用__call()而不是该方法。下面的代码演示了这一点。

例子:

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);
  
?>

输出:

35


Made with ❤️ in Chengdu. Copyright reserved 2019-2022.

蜀ICP备20006366号-1