原标题:为什么有些程序员看不起PHP这门语言?“规矩”二字你要牢记!

《士兵突击》中有这么一段话:

老马继续苦笑:“跟你讲个故事。狗栏里关了五条狗,四条狗沿着顺时针方向跑圈,一条狗沿着逆时针方向跑圈。后来顺着跑的四条都有了人家,逆着跑的那条被宰了吃肉,因为逆着跑那条不合群养不熟,四条狗……甭管怎么说,它们的价值也是一条狗乘以四——你听明白了吗?

。。。。。。

许三多不理他,接着说他的“明白”——那条狗要是一会儿顺着跑,一会儿逆着跑就好了。

老马明显是噎了一下:“为……什么?”

“因为……反正在圈里,反正得跑圈,这样有意思一点……”许三多被老马瞪得有些发毛,顺时针逆时针地划着手指,“这样跑不容易晕……跑圈嘛,很容易晕的。”

PHP严格来说不算是一个独立的,功能齐全的编程语言。它本身就是为了快速生成网页而被发明出来的。现在PHP有了很大的发展,但是它的这个出身,其实对他的发展还是有挺大的影响的。比如和java比吧,不够企业化。

比如java有企业级功能,特别是EJB,能够支持非常复杂和健壮的企业级应用,以及比较大的规模的并发系统。

和c/c++比又不够底层,很多底层功能无法支持。

和python,ruby,perl比,又不够脚本,没有unix/linux血统。和go比吧,没有google撑腰。而且说快速生成网页吧,现在大把的语言都支持,就拿java说吧,java还是有企业级的比如JSF支持。而且现在WEB系统都玩的富客户端,js基本上都独立实现很多业务逻辑了,后端已经退化成或者还原其本来面目了。因此PHP的发展和地位可想而知。

总结一下PHP的情况就是生不逢时,没有好爹。

但是PHP的优点也很多,要我说,就是处理字符串很简单,你用过Perl吗?Perl总是要区分标量、数组、哈希,尤其是那个引用规则,加上她 OOP 里那些个宗教用语,显然 PHP 相对来说规则要简单太多,不是吗?

PHP 早期就带着个基础函数有个大毛病,命名规则不统一加上参数顺序稀里糊涂,很多程序员都有对齐、命名强迫症,会觉得这设计得也太随意了。如果你按用途和添加时间分个类,就会发现也没那么糟了。

其次,神奇的array,老实说我觉得这也许算个优点,搞得我甚至在 Java 里都习惯一个 Map 通吃全部结构,并弄了个方法集以便像 PHP 的 array 一样随意多层存取而不报异常。这个观点估计会被喷,没错,这就是我要说问题之一。

对于一个已经习惯了在其他语言里区分数组、哈希等的程序员来说,这 array 是个啥玩意呀,它同时是 list/map/set,那么你的同事写的代码传递给你一个 array 时你也得小心了,两人没讲清楚结构最终可能就要干一架。

然后,错误处理。总的来说他有三套异常方案,返回值、error_handle、try/catch。

返回值本来没什么好说的,但问题是一般比较时 void、null、false、0、空串和字串0 均表示否,尤其是那个字符串0简直是新手犯错的重灾区。error_handle 的问题在于截获的现场不在当下,什么意思呢?当 trigger_error 后仅仅表示程序有问题、或有要注意的事,在发生的位置,你可以终止也可以继续,所以这根本不像一种异常处理机制,倒更像一个试图统一的运行时日志机制。

还有,全局环境。比如 $_GET、$_POST 直至 $GLOBALS,它太方便(没规矩)了,导致程序员虽然从表面上分了 MVC,可是不知道哪层突然想用到一个比如 Session 里的什么东西,就直接取了——手册就这么教的?!

作为胶水语言 PHP 挺好,但问题在于早期也就仅限于能做胶水。过去 PECL/PEAR 收录的还不是很全,或者倒霉催的遇到前同事遗留的不知道啥法子编译安装的 PHP 时,你想加模块也得跟着编译。这一编译不打紧,在 Linux 上有非常大的概率遇到依赖问题,一个库要这个版本,另一个库要另一个版本,或者依赖的库又依赖另一个库。当你在你自己的机器上搞得一切顺利的时候,结果上了客户的机器就一箩筐的问题,搞得下不来台。

有时候你也不能批评这个语言不好,因为它只是多做了些封装、多提供了一些可能,这有错吗?你更不能批评人不行,在不同的历史时机使用他的人群也不尽相同。

语言是什么?语言就是交流的规则。但愿随新老交替,能贯彻好规范吧。返回搜狐,查看更多

责任编辑:

更多推荐

php被看不起,为什么有些程序员看不起PHP这门语言?“规矩”二字你要牢记!