直到刚才,我才想明白大家对 PHP 的用法是如此迥异
导致一系列悲剧的起因是,大家的母语不同(当然,我是说程序的母语)。
对于早期的 PHP 使用者来说,大多数人在接触 PHP 之前都早已熟悉了编程,因此他们在接触 PHP 时,关心的不是 PHP 能干什么、该干什么,而是 PHP 跟他之前掌握的语言有何不同、以及怎么消除这种不同。
例如,Smarty 是最令我疑惑的东西,我完全理解不了为什么要用这种脱裤子放屁的东西,而且想当初模板类有那么多,今天我才明白,基本上是个语言都会有模板类,所以他们在用 PHP 的时候,也理所应当的认为要搞一个,而一直在回避最基本的问题:PHP 是模板语言。所以他们借助 PHP 实现了另外一套叫 Smarty 的语言。搞得我很自卑,因为我一直不会用 Smarty,所以招人的时候总要问一句“会 Smarty”么,我想的是只要有人会就可以了。
另外一个东西,我不知道应该单独批判 Controller 还是整个 MVC。当我写了几年 PHP 后,突然大家都开始自己解析 $_SERVER["REQUEST_URI"] 并 require 对应的文件,说这叫统一入口,这事也让我很惊奇。我相信有太多的人碰到过为了加个 google webmaster 的验证文件之类的东西而不得不去改动 PHP 文件的情况,这真是自找。后来我才明白,在很多语言中,整个 web server 都要自己实现的,所以解析 URL 是份内要做的事情。但 PHP 是寄生于 web server 上,本来不需要惦记这个问题,最多借助 web server 的 url writer 是为了美化,而不是为了功能。
还有一些错误的优化方向,例如有人提议不要使用 require_once 而只用 requrie,因为前者会增加一个类似 in_array() 的操作,这真让人崩溃,也许这种开销在操作系统的内核中会被循环给放大,但是对于 web 开销来说,九牛一毛都谈不上,让 facebook 的程序员在他们代码里这么替换,能省出几台机器?对于你实际的应用,能省出两条内存么?够你一上午的工资么?
这些扯的远了。鉴于 PHP 各种奇怪的方式使用着,我只能猜想这一现象是映射太多不同语种的程序员对 PHP 的不同理解,很多写过点 C 或 Java 的人用 C 或 Java 的方式写 PHP,并教那些新入行的程序员也以这种方式写 PHP,在他们眼里 PHP 是稍微差一点的 C 或 Java,因为 PHP 还实现不了某些特性,但很少会去想,他们为什么要用 PHP,或许仅仅出于被迫,而不是自己的一种选择?