【相關學習推薦:php圖文教學】
我們來開門見山地說。PHP 是一門奇葩的語言。它既不快,文法又不漂亮。還沒有遵守良好的軟體開發實務。但我還是用它開發了很多軟體。那麼問題就很明顯了為什麼今天還在用 PHP ?
除了個人理想主義的偏好以外,還有很多理由。這才是我們要討論的範圍。為什麼選 PHP 作為我的 Web 開發語言?
「PHP 代表什麼意思?」 或者這麼問,「PHP 是什麼?」 PHP 是一門寫 web 頁面的語言,底層使用 C 語言實現,使用 HTML 的標籤語法包裹程式碼。 PHP 通常跑在服務端,與 web 伺服器配合工作,負責把 HTML 加工完回給訪客。
PHP 最初的意思是 「 Personal Home Page 」。因為這完全限制了使用該語言進行一般使用的意義和可取性,所以該語言現在代表“ PHP:Hypertext Preprocessor”。這種寫法稱為遞歸縮寫(一種全名引用自己的縮寫)。極客們都喜歡用這種名字。
PHP 能用來做什麼?通常來說 PHP 能做任何你想在 web 伺服器上實現的東西。比如說做一個部落格。實作一個 SAAS 應用也完全不在話下。寫一個臨時處理資料的腳本也是得心應手。又或者寫了一個複雜的腳本,某一天突然變成了成功的軟體業務?過去也經常發生。
如果你不相信我,可以看下PHP 官網列出使用場景:
我不太鼓勵最後一項,但它確實可行。但是前兩項確實是很棒的理由 。
這就引出了一個重要且無法迴避的事實...
了解和喜愛PHP 的理由有非常多,可能最給力和有效的理由是:它可以在網路的任何地方使用和運作。如果你仔細尋找,你買到每月最低3美元的託管帳戶可能可以運行 Python 或 Ruby 的 Web 應用程式。但它肯定能運行 PHP 。這意味著無論什麼時候你都可以依賴 PHP 。
因為 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 可以非常融洽地工作在一起。將我們也會繼續使用PHP的原因.html
修改為我們也會繼續使用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的原因的詳細內容。更多資訊請關注PHP中文網其他相關文章!