视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
php实现重载的方法是什么
2020-11-06 11:42:35 责编:小采
文档


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编程(视频)

    下载本文
    显示全文
    专题