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. IOS设计模式第一篇之MVC

    设计模式的好处:我们可以写出容易理解,重用度很高的代码.降低代码的耦合度,符合软件工程的思想. 设计模式主要分为三类:创造型的:单例和抽象工厂.结构类型的: MVC  Decorator, Adapt ...

  2. Spark Streaming

    Spark Streaming Spark Streaming 是Spark为了用户实现流式计算的模型. 数据源包括Kafka,Flume,HDFS等. DStream 离散化流(discretize ...

  3. div box container随主体内容自动扩展适应的实现

    /**顶部部分*/ .con-tl{ background:url(../images/left.png) no-repeat 0 0 rgba(0, 0, 0, 0); padding-left: ...

  4. canvas 画六边形

    <section class="m1-c"> <div class="m1-t clearfix"> <ul> <li ...

  5. redis pipeline

    redis pipeline 简而言之就是把多个redis命令打包,一起发送给redis server,并且一起返回结果,减少客户端和服务器之间的多次“折返跑”

  6. SpringMVC上传文件

    SpringMVC中上传文件还是比较方便的,Spring内置了一些上传文件的支持类,不需要复杂的操作即可上传文件. 文件上传需要两个jar支持,一个是commons-fileupload.jar和co ...

  7. [f]JQ cookie插件

    jQuery.cookie = function(name, value, options) { if (typeof value != 'undefined') { options = option ...

  8. 慧都独家披露DevExpress v13.2测试版重大变化

    昨日,DevExpress隆重宣布发布v13.2.3测试版,想抢先尝鲜的朋友可以在这里下载哦.希望使用DevExpress旧版本的朋友,看到这些更新后能尽快更新你的代码,以免造成不必要的麻烦. Das ...

  9. Asp.Net Web API 2第八课——Web API 2中的属性路由

    前言 阅读本文之前,您也可以到Asp.Net Web API 2 系列导航进行查看 http://www.cnblogs.com/aehyok/p/3446289.html 路由就是Web API如何 ...

  10. ajax请求的异步嵌套问题分析

    (本文章以as3代码为例) 问题的产生 在前端开发时,经常会使用到Ajax(Asynchronous Javascript And XML)请求向服务器查询信息(get)或交换数据(post),aja ...