paip.编程语言方法重载实现的原理及python,php,js中实现方法重载



有些语言,在方法的重载上,形式上不支持函数重载,但可以通过模拟实现。。

主要原理:根据参数个数进行重载,或者使用默认值 ,或者根据参数类型重载





对于静态语言java ,c++来说, 形式上就可以实现函数重载

对于动态语言,python,php,js 形式上不支持函数重载,可根据参数个数进行模拟。。  也可模拟根据参数类型重载模拟





作者Attilax 艾龙,  EMAIL:1466519819@qq.com

来源:老哇的爪子 Attilax

地址:http://blog.csdn.net/attilax



==========php中的方法重载

***

在php中实现重载,主要通过魔术方法 __call 实现。也可通过参数个数进行重载

__call 会自动获得两个参数,第一个参数代表要求调用的函数名,第二个参数代表由实参组成的数组。

***/



__call 实际上还是使用根据参数个数进行重载的...

重载的例子我写了个,你参考一下

    function overloadTest(){

        $name = "overload".func_num_args();

        $name();

    }

    function overload0(){

        echo 'overload0';

    }

    function overload1(){

        echo 'overload1';

    }

    function overload2(){

        echo 'overload2';

    }

    overloadTest();                  //overload0

    overloadTest(1);                //overload1

    overloadTest(1,1);             //overload2





====================js中 当一个作用域中同时定义两个相同的方法名时不会报错。但真正使用的是后一个函数

 要实现重载,原来的方法改名,不个调用的方法放得个最后.

  function createTab_1(tabname)



    function createTab(tabname,taburl) {

                if(arguments.length==1){

                createTab_1(tabname);

                }





================python中的重载

用python实现:

f(str,times=1)

print str*times

打印一次就调用f(str),打印多次就调用f(str,times),调用方法一样。

从形式上先,与C++相比,代码省了很多,但功能是一样的。times=1表示参数没有指定时,默认情况下的值为1



默认值就是python用来实现函数重载的重要方法。







参考

php中实现方法重载: - Owl Base的日志 - 网易博客.htm

paip.编程语言方法重载实现的原理及python,php,js中实现方法重载的更多相关文章

  1. paip.提升效率--数据绑定到table原理和流程Angular js jquery实现

    paip.提升效率--数据绑定到table原理和流程Angular js  jquery实现 html #--keyword 1 #---原理和流程 1 #----jq实现的代码 1 #-----An ...

  2. 【转载】JS中bind方法与函数柯里化

    原生bind方法 不同于jQuery中的bind方法只是简单的绑定事件函数,原生js中bind()方法略复杂,该方法上在ES5中被引入,大概就是IE9+等现代浏览器都支持了(有关ES5各项特性的支持情 ...

  3. 原生JS中apply()方法的一个值得注意的用法

    今天在学习vue.js的render时,遇到需要重复构造多个同类型对象的问题,在这里发现原生JS中apply()方法的一个特殊的用法: var ary = Array.apply(null, { &q ...

  4. js中apply方法的使用

    js中apply方法的使用   1.对象的继承,一般的做法是复制:Object.extend prototype.js的实现方式是: Object.extend = function(destinat ...

  5. js中settimeout方法加参数

    js中settimeout方法加参数的使用. 简单使用看w3school  里面没有参数调用,  例子: <script type="text/javascript"> ...

  6. js中split()方法得到的数组长度

    js 中split(",")方法通过 ”,“ 分割字符串, 如果字符串中没有 “,” , 返回的是字符串本身 var str = “abc”://分隔符个数为0 var newSt ...

  7. 关于JS中的方法是否加括号的问题

    js中的方法什么时候加括号什么时候不加括号呢,我们有时候经常就搞不清楚,记住下面这几点就好理解了. 1.函数做参数时都不要加括号. function fun(a){ alert(a); } funct ...

  8. js中的方法如何传入多个参数

    js中的方法如何传入多个参数 $(function () { let parameter1 = 1; let parameter2 = 'Hello World'; let parameter3 = ...

  9. js 中的方法注入(aop)

    js 中的方法注入 java中很多框架支持 apo 的注入, js中也可以类似的进行实现 主要是通过扩展js中方法的老祖 Function 对象来进行实现. Function.prototype.af ...

随机推荐

  1. C# 程序间通信的各种途径及解析

    一.开篇 程序间通信的主要目的是实现多台计算机(也可以是同一台)中应用程序之间的数据共享与信息交换.在不同的计算机系统中,它们之间要通过网络之间的协议才能 实现数据共享与信息交换:在同一台计算机系统中 ...

  2. C# 代码页获取input的值

    <input id="aa" name="iaa" type="text" /> Label1.Text = Request.F ...

  3. C++中,指针数组和数组指针

    这俩兄弟长得实在太像,以至于经常让人混淆.然而细心领会和甄别就会发现它们大有不同. 前者是指针数组,后者是指向数组的指针.更详细地说. 前: 指针数组;是一个元素全为指针的数组. 后: 数组指针;可以 ...

  4. 解决: Can’t connect to local MySQL server through socket /var/lib/mysql/mysql.sock

    今天在搬瓦工上使用mysql 命令行,总报一个这样的错:Can't connect to local MySQL server through socket '/xxxxx/mysql.sock',一 ...

  5. Spring 4 官方文档学习(十一)Web MVC 框架之约定优于配置

    当返回一个ModelAndView时,可以使用其addObject(Object obj)方法,此时的约定是: An x.y.User instance added will have the nam ...

  6. ue4 SNew补遗

    上一篇分析了SNew背后的实现,但是有一个关键问题遗漏了,那就是: #define SNew( WidgetType, ... ) \ MakeTDecl<WidgetType>( #Wi ...

  7. textarea 在不同浏览器高宽不一致的兼容性问题

    在html,很多同学喜欢使用rows.cols,来设置textarea的高宽,却发现,在火狐跟其他浏览器,好像高宽却不一致! 因为这是火狐的一个bug, https://bugzilla.mozill ...

  8. 使用VPN服务器解决公司不能上淘宝的问题

    很多公司为了保证员工的效率,通常采用屏蔽端口的方法屏蔽掉了一些网站,比如淘宝.QQ网页版等,这样做虽然也是公司的迫不得已,但是也有点不人性化,毕竟非上班时间也是上不去此类网站的.前些日子电商大站,抢不 ...

  9. jsp_设置错误页

    在各个常用的web站点中,当一个页面出错后,会自动跳转到一个页面上进行错误信息的显示.下面我们说说这个操作是怎么实现的. 要想完成错误页的操作,在jsp页面必须满足两个条件: (1)指定错误出现时的跳 ...

  10. JavaScript 设计模式 - 工具函数

    1.类式继承,模拟面向对象语言的继承方式 function extend(subClass, superClass) { var F = function() {}; F.prototype = su ...