设为首页 收藏本站
查看: 317|回复: 0

[经验分享] PHP 函数重载

[复制链接]

尚未签到

发表于 2017-3-20 12:18:45 | 显示全部楼层 |阅读模式
  对于弱类型语言来说,PHP函数重载,并不像一般的OOP那样。
  因为函数重载必须满足两个条件:
  1、函数参数的个数不一样。
  2、参数的类型不一样。
  这两点,PHP都没有办法满足,您可以对函数多添加参数,只是相当于多传了个临时变量。而弱类型本来就不区分,所以无法通过这些来实现。
  但是,可以通过下面的方法来实现简单的伪重载吧。
  1、默认参数
  从这个上面就可以看到,如果一个函数里面,我对不是必须参数填写添加相应的默认值,就可以完成相应的功能。
    function overloadFun($param1, $param2 = '1',$param3 = true){// do something }
  2、利用函数func_get_args()和call_user_func_array(),详细的帮助参照PHP手册。
  利用一个有规则的函数进行调用,以方便统一管理。
    function overloadFun(){// overloadFun可以随便定义,但为了命名规范,建议宝贝为与此函数名一样,// 后面的尾随数值为参数个数,以方便管理$name="overloadFun".func_num_args(); return call_user_func_array(array($this,$name), func_get_args()); }function overloadFun0(){// do something}function overloadFun1(){// do something}function overloadFun2(){// do something}
  3、利用__call($name, $arg) 函数进行处理。
    function __call($name, $args){if($name=='overloadFun'){switch(count($args)){case 0: $this->overloadFun0();break;case 1: $this->overloadFun1($args[0]); break;case 2: $this->overloadFun2($args[0], $args[1]); break;default: //do somethingbreak;}}}function overloadFun0(){// do something}function overloadFun1(){// do something}function overloadFun2(){// do something}  
  
总结,这几种方法,都可以实现伪重载,基本第2种和第3种,内容可以相互处理判断。
  文中只是给出了方法,可能还有许多细节地方需要处理,比如,判断整型、类别等。
  不过,根据上面的内容,php可能永远不会出现真正的重载,那样就会失去语言本身的意义了。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-352371-1-1.html 上篇帖子: php 时间计算 下篇帖子: PHP 排列组合
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表