• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

PHP面向对象-详细介绍模拟一般面向对象语言中的方法重载(overload)

php 搞代码 4年前 (2022-01-22) 35次浏览 已收录 0个评论

在一般的面向对象设计语言(如C++,Java)中的方法重载就是定义相同的方法名,通过“参数的个数”不同或“参数的类型”不同,来访问我们的相同方法名的不同方法。但是PHP 中,方法是不能重载的,因为PHP 是弱类型的语言,所以在方法的参数中本身就可以接收不同类型的数据,又因为PHP 的方法可以接收不定个数的参数,所以通过传递不同个数的参数调用不相同方法名的不同方法也是不成立的。所以在PHP 里面没有传统上的重载(overload)方法,但由于php其灵活性,可以模拟一般面向对象语言中的重载方法。

在PHP中模拟一般面向对象语言中的方法重载(overload)

首先来看一个例子:

<?php  /*重写/覆盖  override  指:子类重写了父类的同名方法  重载: overload  指:存在多个同名方法,但参数类型/个数不同. 传不同的参数,调用不同的方法。  但是在PHP中,不允许存在多个同名方法。 因此,不能够完成java,c++中的这种重载。  但是,PHP的灵活,能达到类似的效果 */   //在PHP中模拟重载的方法  class Calc {       public function area() {   //求面积        // 判断一个调用area时,得到的参数个数           $args = func_get_args();           if(count($args) == 1) {   //只有一个参数            return 3.14 * $args[0] * $args[0];   //求圆的面积         } else if(count($args) == 2) {   //有2个参数            return $args[0] * $args[1];   //求矩形的面积        } else {               return '未知图形';           }       }   }   $calc = new Calc();   // 计算圆的面积  echo $calc->area(10),'<br />';   // 计算矩形的面积   echo $calc->area(5,8);  ?>

利用PHP的重载(overloading)技术,实现一般面向对象语言中的方法重载(overload)

  下面的例子是利用利用PHP的重载(overloading)技术,使用魔术方法,来实现传统上的方法重载(overload)。 

 关于PHP中的重载技术,请参考:PHP面向对象_重载(overloading)

例子:

<?php/*目标:设计一个类,这个类的实例,可以实现如下需求:调用方法f1:传入1个参数,就返回其本身,传入2个参数,就求其平方和,传入3个参数,就求其立方和,其他参数形式,会报错!*/class A{    //这是一个魔术方法,在A的对象调用不存在的方法时    //会被自动调用来应对这种情况    function call($Func_name, $argument){        //使用f1不存在的情况            if($Func_name === 'f1'){                    $len = count($argument); //获得实参的个数            if($len<1 || $len>3){                trigger_error("参数数量有误!", E_USER_ERROR);             }else if($len == 1){                            return $argument[0];               }else if($len == 2){                            return $argument[0]*$argument[0] + $argument[1]*$argument[1];             }else if($len == 3){                            $v1 = $argument[0];                            $v2 = $argument[1];                            $v3 = $argument[2];                            return $v1*$v1*$v1 + pow($v2, 3) + pow($v3, 3);            }        }else if($Func_name === 'f2'){ //另一个不存在的方法        }else if($Func_name === <div style="color:transparent">!本文来源gaodai.ma#com搞##代!^码网(</div><sup>搞gaodaima代码</sup>'f3'){ //......        }    }}$a = new A();$v1 = $a->f1(1);$v2 = $a->f1(2,3);$v3 = $a->f1(4,5,6);echo "v1= $v1, v2 = $v2, v3 = $v3";?>

运行结果为:

v1= 1, v2 = 13, v3 = 405

以上就是PHP面向对象-详细介绍模拟一般面向对象语言中的方法重载(overload) 的详细内容,更多请关注搞代码gaodaima其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:PHP面向对象-详细介绍模拟一般面向对象语言中的方法重载(overload)
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址