您的当前位置:首页正文

php实现重载的方法是什么

2020-11-06 来源:华佗健康网

php实现重载的方法:

php是弱类型语言,并没有像JAVA这种强类型语言一样有重载。

重载一般来说就是拥有相同的函数名或方法名,但是参数列表却不同(包括参数个数和参数类型)

从这个定义来说,php是没有重载的,因为php不允许存在相同的函数名。

但是没有并不意味着不能实现。

php有四种机制可以实现重载:(下面用java进行对比)

1、弱类型,无需定义变量类型

先举一个JAVA重载的例子:

class demo
{
 public static void main (String[] args)
 {
 sum(1,1);//2
 sum(1,1.5);//2.5
 sum(1.5,1.5);//3.0
 }
 public static void sum(int var1,int var2){
 System.out.println(var1+var2);
 }
 public static void sum(int var1,double var2){
 System.out.println(var1+var2);
 }
 public static void sum(double var1,double var2){
 System.out.println(var1+var2);
 }
}

上面的代码如果用php语言实现:

<?php
function sum($var1,$var2){
 echo $var1+$var2;
}
sum(1,1);//2
sum(1,1.5);//2.5
sum(1.5,1.5);//3
?>

2、可选参数,允许变量设置默认值

JAVA重载例子:

class demo
{
 public static void main (String[] args)
 {
 sum(1,2);//3
 sum(1,2,3);//6
 }
 public static void sum(int var1,int var2){
 System.out.println(var1+var2);
 }
 public static void sum(int var1,int var2,int var3){
 System.out.println(var1+var2+var3);
 }
}

用php可选参数特性实现:

<?php
function sum($var1,$var2,$var3=NULL){//$var3设置默认值
 echo $var1+$var2+$var3;
}
sum(1,2);//2
sum(1,2,3);//2.5
?>

可以看到同样的功能,但是php这种弱类型语言实现起来更简单

3、可变参数

主要用到以下两个函数:

  • func_num_args()返回函数的参数个数

  • func_get_args()返回一个包含函数参数列表的数组

  • 具体实现方式:

    <?php
    class demo{
     public function method(){
     $numargs = func_num_args();//获得参数数量
     $args = func_get_args();//获得参数数组
     switch ($numargs) {//通过变量个数来确定调用哪个方法
     case 2:
     $this->method2($args[0],$args[1]);
     break;
     case 3:
     $this->method3($args[0],$args[1],$args[2]);
     break;
     }
     }
     private function method2($var1,$var2){
     #code...
     }
     private function method3($var1,$var2,$var3){
     #code...
     }
    }
    //调用
    $obj = new demo();
    $obj->method('var1','var2');
    $obj->method('var1','var2','var3');
    //看起来似乎通过一个接口调用
    //但其实内部已经调用了各自定义的方法
    ?>

    4、使用魔术方法 __call()

    public mixed __call ( string $name , array $arguments )

    在对象中调用一个不可访问的方法时,__call()会被自动调用

    $name参数是要调用的方法名称 $argument参数是被调用方法的参数数组

    具体实现方式类似上面的第三要点:

    <?php
    class demo{
     public function __call($name,$arguments){
     if($name == "method"){
     switch (count($arguments)) {//获得参数数组个数
     case 2:
     $this->method2($args[0],$args[1]);
     break;
     case 3:
     $this->method3($args[0],$args[1],$args[2]);
     break;
     }
     }
     }
     private function method2($var1,$var2){
     #code...
     }
     private function method3($var1,$var2,$var3){
     #code...
     }
    }
    //调用
    $obj = new demo();
    $obj->method("var1","var2");
    $obj->method("var1","var2","var3");
    ?>

    相关免费学习推荐:php编程(视频)