分类: 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是一回事。
原文地址: