PHP中的方法重载是什么?


方法重载是面向对象编程的一个概念,它有助于轻松构建复合应用程序。函数重载或方法重载是一个允许创建多个具有相同名称但根据其接受的参数类型的不同而以不同方式工作的函数的功能。

上述概念对于其他编程语言来说很好,它被称为静态多态性,即方法重载。

示例

让我们通过一个例子来理解。

<?php
   class machine {
      function doTask($var1){
         return $var1;
      }
      function doTask($var1,$var2){
         return $var1 * $var1 ;
      }
   }
   $task1 = new machine();
   $task1->doTask(5,10);
?>

输出

Error

解释

这将生成一个错误,因为PHP会提示您已声明此方法两次。
但是其他编程语言说,doTask($var1) 和 doTask($var1,$var2) 是重载的方法。要调用后者,必须传递两个参数,而前者只需要一个参数。
因此,这种行为,即在编码时调用函数的决策,被称为静态多态性,即方法重载。

让我们讨论如何实现与PHP5相关的方方法重载。在PHP中,我们必须利用PHP的魔术方法__call()来实现方法重载。

在PHP中,重载意味着方法的行为会根据输入参数动态变化。在本教程中,我们将了解这些概念。让我们讨论__call()方法。

__call()

如果一个类执行__call(),那么如果用一个不存在的方法调用该类的对象,则会调用__call()来代替该方法。

示例

让我们通过一个例子来理解方法重载。

<?php
   class Shape {
      const PI = 3.142 ;
      function __call($name,$arg){
         if($name == 'area')
            switch(count($arg)){
               case 0 : return 0 ;
               case 1 : return self::PI * $arg[0] ;
               case 2 : return $arg[0] * $arg[1];
            }
      }
   }
   $circle = new Shape();
   echo $circle->area(3);
   $rect = new Shape();
   echo $rect->area(8,6);
?>

输出

9.426
48

解释

此处area()方法是动态创建的,并在魔术方法__call()的帮助下执行,并且它的行为根据作为对象传递的参数而变化。

更新于:2019年12月31日

9000+ 次浏览

启动你的职业生涯

通过完成课程获得认证

开始学习
广告