Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1621765
  • 博文数量: 1481
  • 博客积分: 26784
  • 博客等级: 上将
  • 技术积分: 17045
  • 用 户 组: 普通用户
  • 注册时间: 2011-07-12 09:22
文章分类

全部博文(1481)

文章存档

2014年(10)

2013年(353)

2012年(700)

2011年(418)

分类: IT职场

2012-11-30 09:23:45

众所周知的,PHP是弱类型的动态语言,动态语言的动态表现在各个方面,变量类型动态,函数参数动态。动态参数这个参数决定了
PHP不支持(也不需要)支持函数重载。
(PS:函数重载可以看成是行为(函数或操作符)的多态行为,重载的唯一要求就是不能产生多义性(强类型语言表现在同一行为的重
载的形参列表不能有两个(或以上)完全相等的情况)。

为什么需要在PHP代码中出现限制这么多的重载嘞?
我对PHP是这样理解的:最初的PHP仅仅是作为一种解释脚本用来动态构建HTML页面,即是HTML页面与MYSQL连接的桥梁。而最初的
脚本规模是不大的,在小规模的程序中,动态技术可以便捷的开发。但是,当程序处理越来越复杂,动态的弊病也日益凸显---动态
技术让开发迅速,却让代码测试调试变得艰难。在一个复杂的程序中,保持程序的健壮性是很重要的。有过项目经验的童鞋能够感觉
到(你们是不是大部分时间在找bug,找完bug之后改bug。bug改完之后继续下一个bug)。静态语言的
好处就是快速的定位错误。
PHP6对强类型限制也增加了内容。。。。

PDO库的函数 PDO::query()就是重载了(没有读过PDO源码,不胡说它的实现。不过它的设计就是重载思想)。

    我对其原型的猜测如下
class PDO{
    public function query(){
    //这里使用func_get_args()得到形参列表,利用该形参列表进行判断
    //再调用相关的以下的私有方法
    //这么处理的好处就是在下面的私有方法中,我们完全可以假定形参类型是已知的
    //在这些private 函数中,我们不需要进行任何形参判断,可以十分舒服的写这些具体实现    函数
    //这个self::query()作为一个接口供外部调用,self::query()的唯一目标就是进行函数调度。    同时也实现了程序的分离
    //(我一直奉行一个函数只干一件事的编程方法,同时也认为将一个函数写出超过一屏是一种糟糕的编程习惯)。    
    }
    private function query_1(string);
    private function query_2(string,int,int);
    private function query_3(string,int,string,array);
    private function query_4(string,int,object);
}

这么写的好处是对于private function query_[1,2,3,4]这几个方法调试是非常方便的。至少我们保证了错误不是由于变量类型等未知
因素引起的,我们可以花更多的时间测试函数过程。当然,也破坏了动态性。不过PHP自己也在干这事,元芳都不会怎么看的。

关于动态,我的个人看法是程序越来越复杂的时候,动态的优势越来越少,而弊病越来越严重。


我举这个例子是想要说明PHP是动态语言,但是也不是不可以有静态语言的解决方案。C/C++是静态语言,也不说明他们不可以有动态技术。
让思维再开阔一点,你的代码将会更加优雅。

骚年们,为了优雅的代码而奋斗撒!

-------以上言论纯属个人胡说八道,不代表本人的立场,也不代表本人会持久的坚持以上观点,
也不愿代替其他人的立场---------

后记:在该文写作之前,并没有开始学习EXTJS框架。现在知道了javascript可以变得和JAVA一样,ExtJS的设计和JAVA中的JCompent是一回事。

原文地址:

阅读(693) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~