為什麼很多人討厭 PHP ?
幾年前我有回覆類似的問題,核心理念是,當我們只從一個或少數角度來觀看一件事時,往往會忘了另一片風景。
重點是,我們打算用程式語言(PHP)做什麼?這會決定我們看的角度,甚至影響了我們的心態。我曾在公開演講中表示,程式語言對我來說,是個「選擇(Option)」,是用來「解決某個問題」。如同我們不會拿榔頭敲掉螺絲,而是使用螺絲起子。一旦我們受限於只比較「工具」的局部特性時,我們很容易只看到一個工具的缺點,而忘了它的優點。
今天我在網路上看到 Phil Sturgeon 在 Quora 針對此問題的回答,同時也同步在他的網誌,分享給大家。
Phil 認為很多人有各種不同的理由「討厭」PHP,或至少看衰它。其中有一些是有根據的,有些則否。
1. Inconsistent haystack / needle
Phil 舉的第一個例子是「不一致的 haystack / needle」。
舉個 PHP 中的兩個內建函式:
- in_array($needle, $haystack)
- strpos($haystack, $needle)
很多人批評函式參數的 haystack 及 needle 在不同的情況下的順序不一致,這導致開發者很可能要「硬背」這些 API。
Phil 指出,其實 PHP 的函式設計是有規則的。如果 haystack 處理的是 array,則順序是 needle, haystack;反之若是 string,則順序是 haystack, needle。
2. PHP is a HTML file, with logic
很多人認為 PHP 與 HTML 的混用規則是很奇怪的設計。
Phil 指出,PHP 在起初設計上就是預設檔案是個 HTML,只是中間可以嵌入一些 PHP 的邏輯處理。我們也不能否認的是,在當時的那個時代,這個設計使得 PHP 使用率得以快速成長。
但也不能否認的是,這個現象在現代看來有些不合味口,所以在未來的 PHP 6 將會引入新特性來讓開發者得以解決這個問題。
3. No standards
在 PHP 的世界中有太多的 Web framework,每個都有著自己的標準,例如很多人會爭論使用 snake_case 還是 camelCase。最近這個現象也開始舒解了,因為有 PHP-FIG 組織制定了相關的遵循標準。
4. Lack of Quality Packages
另外很多人批評 PHP 沒有夠好的套件管理工具。例如我們知道,
- Node.js 有 NPM
- Ruby 有 Bundler/Gems
- Python 有 PIP
- Perl 有 CPAN
而過去的 PHP 只有難用的 PEAR。相對好用的 PHP 套件管理工具也不是沒有,只是過於分散不集中。例如,
Phil 認為這個現象將會也會得到舒解。因為除了 PHP-FIG 組織制定的 PSR-0 標準外,也有 Composer 團隊推出標準的套件管理計畫。
5. Misconception
Phil 指出(編者註: Phil 同時也是 Ruby 使用者),很多 Ruby 開發者對 PHP 的批評認知還停留在 PHP 4 的時代。其實 PHP 5 已改進非常多,甚至 PHP 5.3 是一個大躍進。他認為很多人的評論還停留在 7 年前的 PHP。
Phil 同時也說,有些人說 PHP 沒有內建 Web server 是個很糟糕的事,但好消息是從 PHP 5.4 開始就內建 built-in web server 功能了。
6. You were doing it wrong
Phil 指出,很多人會說「You can mix MySQL, HTML and PHP in the same files. PHP is disgusting!」(編者譯: 「你可以把 MySQL, HTML 及 PHP 同時放在一個檔案裡面,可見 PHP 多麼噁心」)。
但 Phil 認為這個缺點可以由 PHP Web framework 獲得解決,同時他也認為如果 Ruby 開發者在不使用 Sinatra 或 Rails 時是怎麼解決這個問題的?或者 Node.js 開發者不使用 Express 或 CanJS 時又是怎麼解決的?(編者譯:Phil 指的應該是「不要拿程式語言(PHP)來和 Web framework (Rails 或 Express) 來比較」)
7. Elitism
Phil 感慨的指出,現在很多人認為「不使用 PHP 的人才酷」(編者註:Phil 言下之意不知是否也指「不要以為使用 Rails 或 Node.JS 就覺得很潮」?)
除了批評之外,我們該想想,「為什麼現在還有那麼多人使用 PHP ?」。Phil 認為「沒意外的話,就是氣勢(Momentum)」,他說根據統計,證明就是很多人使用 PHP,也不否認他仍然使用 PHP 的原因就是,相較於 Ruby、Python 及 Node.JS 而言,PHP 仍然擁有最大的市場。
最後 Phil 認為,很多開發者都在追求「完美的語言」,但答案是「世界上沒有完美的工具」,因此沒有任何人應該「討厭」任何程式語言。