PHP实现重载的常用方法实例详解

2018-09-07 12:18

阅读:332

  本文实例讲述了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相关内容感兴趣的读者可查看本站专题:《php面向对象程序设计入门教程》、《PHP数组(Array)操作技巧大全》、《PHP基本语法入门教程》、《PHP运算与运算符用法总结》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》

  希望本文所述对大家PHP程序设计有所帮助。


评论


亲,登录后才可以留言!