美文网首页PHP专题
高级1、PHP 函数重载

高级1、PHP 函数重载

作者: 阿休 | 来源:发表于2018-05-16 18:12 被阅读0次

对于弱类型语言来说,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 something 

break; 

        } 

    } 

function overloadFun0() 

// do something 

function overloadFun1() 

// do something 

function overloadFun2() 

// do something 

}   

总结,这几种方法,都可以实现伪重载,基本第2种和第3种,内容可以相互处理判断

文中只是给出了方法,可能还有许多细节地方需要处理,比如,判断整型、类别等。

不过,根据上面的内容,php可能永远不会出现真正的重载,那样就会失去语言本身的意义了

相关文章

  • 高级1、PHP 函数重载

    对于弱类型语言来说,PHP函数重载,并不像一般的OOP那样。 因为函数重载必须满足两个条件: 1、函数参数的个数不...

  • Callback / Callable 类型

    重载函数,和php的伪重载函数 重载函数a. c++允许在同一范围中声明几个功能类似的同名函数,但是这些同名函数的...

  • js的重载

    问:什么是重载?答:同样的函数,不同样的参数个数。《JS高级程序设计》里是提到过函数是没有重载的,ts中有重载。但...

  • php的运算符/函数/数组/字符串

    1 算术运算符 2 赋值运算符 3递增(++)/递减(--) 4 函数 php的函数不支持重载,所以自定义的函数不...

  • 第八章 函数探幽(4)函数重载

    (四)函数重载 (1)函数重载的含义是可以有多个重名的函数,因此需要对函数进行重载。可以通过函数重载来设计一系列同...

  • PHP编程开发技巧:PHP中重载如何实现

    PHP编程开发技巧:PHP中重载如何实现,重载分为属性重载和方法重载,在PHP中的重载和在其它编程语言的重载不一样...

  • Cocos2dx之C++基础(四)

    函数重载函数不以返回值来区分重载函数函数不以参数名来区分重载函数使用重载函数的时候不要引起二义性结构函数也可以重载...

  • 高质量C++编程指南 ----C++函数的高级特性

    8. C++函数的高级特性 对比于C 语言的函数,C++增加了重载(overloaded)、内联(inline)、...

  • C++ 总结

    1.函数重载是为了实现 虚函数的副产品,函数重载引进了操作符重载,但也引入了工程函数的歧义性。 反例:定义了fun...

  • PHP中实现函数重载

    转载自:https://www.cnblogs.com/ymy124/p/3715430.html由于PHP是弱类...

网友评论

    本文标题:高级1、PHP 函数重载

    本文链接:https://www.haomeiwen.com/subject/falmdftx.html