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

2025-05-29 0 74

本文实例讲述了PHP实现重载的常用方法。分享给大家供大家参考,具体如下:

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

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

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

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

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

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

先举一个JAVA重载的例子:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18
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语言实现:

?

1

2

3

4

5

6

7

8
<?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重载例子:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14
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可选参数特性实现:

?

1

2

3

4

5

6

7
<?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() 返回一个包含函数参数列表的数组

具体实现方式:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28
<?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参数是被调用方法的参数数组

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

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26
<?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程序设计有所帮助。

原文链接:http://blog.csdn.net/whd526/article/details/70239791

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 PHP实现重载的常用方法实例详解 https://www.kuaiidc.com/93128.html

相关文章

发表评论
暂无评论