温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

PHP中如何实现重载

发布时间:2021-06-22 15:02:42 来源:亿速云 阅读:178 作者:小新 栏目:开发技术

这篇文章将为大家详细讲解有关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中如何实现重载”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

php
AI