咱們來開門見山地說。 ** PHP 是一門奇葩的語言。它既不快,語法又不漂亮。尚未遵照良好的軟件開發實踐。** 但我仍是使用它開發了不少軟件。 那麼問題就很明顯了 爲何今天還在使用 PHP ?php
除了我的理想主義的偏好之外,還有不少理由。這纔是咱們要討論的範圍。爲何選 PHP 做爲個人 Web 開發語言?html
「PHP 表明什麼意思?」 或者這麼問,「PHP 是什麼?」 PHP 是一門編寫 web 頁面的語言,底層使用 C 語言實現,使用 HTML 的標籤語法包裹代碼。PHP 一般跑在服務端,與 web 服務器配合工做,負責把 HTML 加工完返回給訪問者。java
PHP 最初的意思是 「 Personal Home Page 」。由於這徹底限制了使用該語言進行通常使用的意義和可取性,因此該語言如今表明「 PHP:Hypertext Preprocessor」。這種寫法被稱爲遞歸縮寫(一種全稱中引用本身的縮寫)。 極客們都喜歡用這種名字。程序員
PHP 能用來作什麼?一般來講 PHP 能作任何你想在 web 服務器上實現的東西。 好比說作一個博客。實現一個 SAAS 應用也徹底不在話下。寫一個臨時處理數據的腳本也是駕輕就熟。又或者寫了一個複雜的腳本,某一天忽然變成了一門成功的軟件業務?過去也常常發生。web
若是你不相信我,能夠看下 PHP 官網列出使用場景:編程
我不太鼓勵最後一項,但它確實可行。可是前兩項確實是很棒的理由 。服務器
這就引出了一個重要且沒法迴避的事實...網絡
瞭解和喜好 PHP 的理由有很是多,可能最給力和有效的理由是:它能夠在網絡的任何地方使用和運行。若是你仔細尋找,你買到每個月最低3美圓的託管帳戶可能能夠運行 Python 或 Ruby 的 Web 應用程序。但它確定能運行 PHP 。這意味着不管何時你均可以依賴 PHP 。composer
由於 PHP 能夠運行在任何地方,而且它容易上手,不少很是受歡迎的軟件都是用 PHP 寫的。 WordPress 是對我影響最大和最熟悉的例子,除此以外,像 Joomla , Drupal , Magento , ExpressionEngine , vBulletin (是的,它仍然存在), MediaWiki 等這些工具,它們都在服務器上運行 PHP 。框架
不只如此,PHP 應用框架更是多得數不勝數, 好比:Symfony , Zend , Laravel , Aura , CakePHP , Yii 甚至是古老的 CodeIgnitor 框架。固然你能夠爲其它任何一門語言製做一些長度至關的 Web 框架列表。好比經常使用的 Web 語言像 Python , Ruby ,或 Node/JavaScript ,你甚至能夠積累一個數字競爭列表來跟 PHP 比較。但運行 PHP 的網站數量龐大到沒法估計。
WordPress 自豪地聲稱在互聯網上有 30% 的用戶量。 你甚至不須要相信這個說法就會意識到許多的互聯網應用必須使用 PHP 即便這個說法甚至能夠想象成是真的。
PHP 和 HTML 能夠很是融洽地工做在一塊兒。將 file.html
修改成 file.php
,便可在 <?php
和 ?>
標籤裏編寫 PHP 代碼,而且大部分的 Web 服務器默認配置就是能夠直接運行 PHP 腳本。正由於其門檻很是低,不須要懂太多編程知識的菜鳥程序員也能夠直接上手操做,以致於產生了不少低品質的代碼。
由於其易學性,大量的菜鳥程序員涌入,暴露出來另外一個 PHP 一直被人詬病的問題:PHP 並無對本身是最好的 Web 服務器端語言有清晰的遠景,固然也沒爲此作過太好的設計。致使走向了另外一個結果,來自全球各地鬆散的合做,大雜燴般地貢獻代碼和想法,難以免地,有一些壞的想法滲入其中。
Composer 是 PHP 的加分項。
在 PHP 的開發中,常常會有一些奇葩的東西被髮布出來。最著名的栗子當屬 PHP 5.3 (普遍的被視爲 PHP 的第一個現代化版本 )中引入 goto
聲明。
相似的問題是在 PHP 成長過程當中產生:面向對象最初是做爲一個有缺陷和有限制的概念來實現的,標準庫中充滿了不一致的名稱和參數排序,而且(舉個近來備受關注的栗子)在 PHP 5.3 中 ::
操做符沒法識別時,解析器會拋出可讀性不好的報錯信息:語法錯誤 (T_PAAMAYIM_NEKUDOTAYIM)
,若是不看文檔,你能用英文來理解這個 T_PAAMAYIM_NEKUDOTAYIM
標示的意思嗎?
可是如今,PHP 已經徹底支持 OOP。不多語言具備像 PHP 這樣相似 Java 的 OOP 實現。另外,與 Java不一樣的是,PHP 有一個單獨的並擁有普遍支持的包管理器,叫做 Composer。它很是的好用,而且不容忽視的一點是它能夠方便地引用優質且維護良好的庫,具備很高的易用性。
經過這些事實發現, PHP 正在以有趣的方式發展着。它正逐漸成爲像java同樣功能齊全的面嚮對象語言(更好或更糟糕),正在爲函數式編程提供簡單的抽象,這能夠說是當前的熱點。而且,正在發展一套很是棒的工具, PHP 喜歡 Composer , 並有充分的理由 --- 由於它在一些大型開源項目的協同工做上作出了值得讚賞的努力.
固然,咱們不該該忘記當前的熱點:PHP 在 PHP7 系列版本中的發展取得了速度上的提高。這被普遍認爲是由 Facbook 出現的 HHVM 引發的,在短期內,存在 HHVM 的發展速度會破壞 PHP 社區的風險,但事實並不是如此,相反,PHP 的發展速度快得多,以致於人們幾乎忘記了 HHVM 的存在。
若是你決定使用什麼很酷的新技術,我認爲常常獲得不多關注的是與語言達成協議的方式。學習PHP是什麼感受? PHP教程很好找,質量一般也很好。
PHP流行的一個缺點是,你會從那些對工具不夠了解的人那裏找到一些不那麼好的教學。或者從某人那裏學到的「最佳實踐」是十年前的。但總的來講,這不多見,我不認爲它應該讓你灰心。或者忽然發現本身使用了幾個月的最佳實踐並非最好的是不多見的,也不是一個大問題。
接下來咱們要對比下 PHP 與其餘的語言,這些語言需知足如下要求:
開源:意味着你能夠自由、免費地使用或者查看底層語言或者程序;
應用於 Web 開發領域:不必定是專一於 Web 開發,可是在 Web 開發中有比較大的應用;
高階動態語言:具有動態語言的特性,大部分面向 Web 應用的語言兼具此特性;
足夠大的社區:有不少知足以上條件,可是隻是在小範圍使用的語言,咱們使用這最後一個條件將他們過濾掉。
也許和 PHP 比較的最重要的語言是 JavaScript。現代開發要求每一個項目都至少會一點 JavaScript 來進行客戶端開發和交互。藉助 Node,這使得在服務器上使用 JS 變得相對簡單。在服務器上和客戶端「同構」使用相同的語言很是吸引人。
如同 PHP,JavaScript 是一個兼容幷蓄但有時醜陋的語言,有不少的瑕疵和「陷阱」,但 JavaScript 在過去十年變得很是快,因此他的狀況是真實的。爲何選擇 PHP 而不是 JavaScript?你已有專業知識或者在 PHP 使用庫。不然,我認爲 JavaScript 或許是個更好的選擇。
動態服務器語言起源於一個用於網友編程的 Microsoft 語言。他和 PHP 很是直接類似。但他運行在 Windows 服務器環境。這被 ASP.net 取代了。如今已被 ASP.NET Core 取代。後二者如今是 PHP 同樣的開源語言。而我我的從沒有在任何變體中寫過一點 ASP。
若是我使用且更喜歡 Microsoft 服務器的話,我會更喜歡 ASP。其餘狀況,請給我 PHP。二者社區的規模和大小沒有可比性。
Ruby,特別是 Ruby on Rails,在過去十年前 很是 受歡迎。Ruby 依然是一個備受喜好的語言,這在我看來他比 PHP 優雅。也就是說,他的社區較小。同時我認識到 Ruby 已經再也不是 "熱門語言"(被 JavaScript 取代了此角色)。Ruby 的優雅,而且有足夠多的人擅長使用,所以我不會避免他。但招聘已熟悉 Ruby 的人依舊比招聘 PHP 要難。(雖然我認爲通常的 Ruby 開發者水平比相同的 PHP 開發者要高。)
最後一種與 PHP 一對一比較起來有意義的是 Python 。 Python 的使用場景要更多,相對於專一於 web 開發的 PHP 來講(尤爲是在數據統計與分析上面)。並且人們廣泛都以爲它是一種更爲更穩定和優雅的語言。
就像 Ruby 和 JavaScript 同樣, Python 在服務器上運行要比 PHP 稍微麻煩一點。可是它是一種很是完美的語言,並且比起 PHP 的使用更具多樣化,我認爲它是比 PHP 更流行的語言之一,並且在其餘方面(例如:各類第三方的庫、專業技術知識的獲取、招聘求職)都是同樣的。
一開始曾提到過,許多語言在作比較時或多或少會有一些類似的地方。這裏有不少的語言能夠拿來作對比,所以簡單的聊幾個:
java 很是受歡迎,而且效率很高。一般被用來搭建安卓應用程序,桌面應用程序,和 web 端應用。不過,它不是動態類型的,它有更好的性能保證,但很適合Web 編程。
Go 是 Google 支持的正在發展的一門新語言。它專一 web 服務。可是這塊相比 PHP 仍是有些不足(更像 C 語言),它的執行速度很快,可是社區相對有限。
** Scala** 是一種流行的運行在內存區(Java 兼容)的語言,也彷佛愈來愈受歡迎。它比 PHP 設計的更優雅,可是除此以外,彷佛沒有更多了。
此外,我以爲這些分析足夠能夠作出選擇了,可是你有更多的選項能夠去考量,不過最後個人替代方案將會考慮 PHP。
有了上面的比較,爲何還要使用 PHP ?上文我已經提過了一些 PHP 裏壞的設計,有一些我常常性會經歷,例如在『查找類型的函數』裏,這些函數needle 和 haystack 順序不一致,在沒有代碼補全的環境下,我仍是會掉坑裏。
若是你在構建一個全新的 Web 項目,而且此項目不須要與其餘系統交互,而且只有你一我的在工做,你想試試看其餘語言,相似 Python 什麼的。可是,你須要知道的是,即便是這樣的一個項目,仍是有不少理由讓你選擇 PHP。
任何現代化的語言均可以讓你構建一個 Web App。每一門語言都有他們不足之處,例如 PHP 就是這樣的,PHP 要求你清晰地瞭解其不足之處,而後才能決策是否要在項目裏使用它。可是對於我來講,我仍然會選擇 PHP 來構建個人 Web 項目,就如 Keith Adams 在其 演講裏 提到的:
PHP 的開發效率真不是通常的高。
若是你有一個 Python 的團隊,請使用 Python。若是你有個合夥人熟悉 Java,請使用 Java 來編寫你的 SaaS 程序。語言,永遠都不是最重要的。
若是你已經看到文章末尾了,你極可能對 PHP 感興趣。 也許你也有興趣閱讀個人其餘內容? 如下是我寫的一些內容。
本人博客 :澤林博客
本人公衆號 :PHP開源Hub,ID:php_open