028-86261949

当前位置:首页 > 技术交流 > 在PHP中方法重载的实现细节

在PHP中方法重载的实现细节

2018/09/24 19:44 分类: 技术交流 浏览:30

首先说明,由于PHP是弱类型编程语言,所以并不能像java或C++那样直接实现方法重载,我们今天讲的方法重载是使用了PHP的一个__call的魔术方法实现的,在官方的文档中也有类似的说明,只是没有实现的实例。
然后,我来为部分小白同志普及一下方法重载的概念。方法重载是面向对象编程语言的一个重要特征,定义多个相同的方法名称,通过不同的参数个数或不同的参数类型,产生不同的结果,称为方法重载。
比如:
  1. //定义一个类,里面有三个同名的方法,只是参数个数或类型不同
  2. class Person{
  3.     public function show(){
  4.     }
  5.  
  6.     public function show(string $str){
  7.     }
  8.  
  9.     public function show(array $arr){
  10.     }
  11. }
  12.  
  13. $a1=new Person();
  14. //重载的效果:根据实际使用时的参数个数以及类型不同,而产生不同的功能
  15. $a1->show('hello');
  16. $a1->show(['1','2','3']);
  17. $a1->show();
当然, 以上代码是不可能执行成功的,因为PHP中是不允许这样编写的,只是一个伪代码,说明一下方法重载的概念而已。
在PHP中要实现方法重载我们必须得使用一个魔术方法 __call(),利用该方法的特性来实现方法重载:
语法: mixed __call ( string name, array arguments )
执行时机:在调用一个不存在的方法时自动执行该魔术方法
参数说明:
1. 被调用的不存在的方法名
2. 调用不存在的方法时传入的参数
给大家写一个可以执行的完整方法重载实例:
  1. class Person{
  2.     private function show1(){
  3.         echo '没有参数<br/>';
  4.     }
  5.     private function show2($str){
  6.         echo $str.'<br/>';
  7.     }
  8.     private function show3($arr){
  9.         foreach($arr as $v){
  10.             echo $v.'--';
  11.         }
  12.     }
  13.  
  14.     public function __call($name,$args){
  15.         if( count($args)==0 ){
  16.             $this->show1();
  17.         }elseif( is_string($args[0]) ){
  18.             $this->show2($args[0]);
  19.         }elseif( is_array($args[0])){
  20.             $this->show3($args[0]);
  21.         }
  22.     }
  23. }
  24.  
  25. $a1=new Person();
  26. $a1->show(); //输出提示语句
  27. $a1->show('hello'); //产生打印字符串的效果
  28. $a1->show(['1','2','3']); //产生遍历数组的效果
总结,在PHP中不能直接实现方法重载,可以使用PHP提供的一个魔术方法从而实现方法重载效果,虽然写法与C++等语言不同, 但是达到的效果是一样的。
 
   感谢源码时代教学讲师提供此文章!
   本文为原创文章,转载请注明出处!
#标签:PHP,细节,重载