9102 年的 PHP

你還記得篇流行的博客文章《PHP:設計糟糕的分形》嗎?我第一次讀到它時,我在一個有不少遺留的 PHP 項目的糟糕地方工做。這篇文章讓我以爲我是否應該放棄,並去作與編程徹底不一樣的事情。php

還好,我以後很快就換了工做,更重要的是,自從 5.x 版本以來,PHP 成功地進步了不少。今天,我在向那些再也不使用 PHP 編程,或者陷入遺留項目的人們致意。react

劇透:今天有些事情仍然很糟糕,就像幾乎每種編程語言都有它的怪癖同樣。許多核心功能仍然有不一致的調用方法,仍然有使人困惑的配置設置,仍然有許多開發人員在那裏寫蹩腳的代碼 —— 由於他們必須如此,或是他們不知道更好的寫法。linux

今天我想看看好的一面:讓咱們關注已經發生變化的事情,以及編寫乾淨而可維護的 PHP 代碼的方法。在此以前,我想請你暫時擱置任何偏見。laravel

而後,你能夠像之前同樣對 PHP 自由吐槽。雖然,你可能會對 PHP 在過去的幾年裏的一些改進感到驚訝。(LCTT 譯註:說實話,我是真的感到吃驚)git

提早看結論

  • PHP 在積極地開發,每一年都有新版本
  • 自 PHP 5 時代以來的性能已經翻倍,若是不是三倍的話
  • 有一個很是活躍的框架、包和平臺的生態系統
  • PHP 在過去幾年中添加了許多新功能,而且這種語言在不斷髮展
  • 像靜態分析這樣的工具在過去幾年中已經成熟,而且一直保持增加    更新:人們讓我展現一些實際的代碼。我以爲這沒問題!這是個人一個業餘項目的源代碼,用 PHP 和 Laravel 編寫的;這裏列出了咱們在辦公室維護的幾百個自由開源軟件包。這二者都是現代 PHP 項目的好例子。

那讓咱們開始吧。github

歷史總結

出於更好地衡量的目的,讓咱們快速回顧一下現在的 PHP 發佈週期。咱們如今的 PHP 爲 7.3,預計在 2019 年末爲 7.4。PHP 8.0 將是 7.4 以後的下一個版本。web

自從 5.x 時代以來,核心團隊試圖保持每一年發佈一個版本的週期,而且他們在過去的四年中成功地作到了這一點。編程

通常來講,每一個新版本都會在兩年內獲得積極支持,並再得到一年以上的「安全修復」。其目標是激勵 PHP 開發人員儘量保持最新:例如,每一年進行小規模升級比在 5.4 到 7.0 之間跳轉更容易。vim

能夠在 這裏 找到 PHP 時間軸的活動概述。安全

最後,PHP 5.6 是最新的 5.x 版本,而 8.0 是當前的下一個大版本。若是你想知道 PHP 6 發生了什麼,你能夠聽聽 PHP Roundtable 播客

瞭解了這個,讓咱們揭穿一些關於現代 PHP 的常見誤解。

PHP 的性能

早在 5.x 時代,PHP 的表現就是……嗯,平均水平。可是在 7.0 版本中,PHP 從頭開始重寫了核心部分,致使其性能提高了兩到三倍!

但光是嘴說是不夠的。讓咱們來看看基準測試。幸運的是,人們花了不少時間對 PHP 性能進行了基準測試。 我發現 Kinsta 有一個很好的更新的測試列表。

自 7.0 升級以來,性能就一直在提高而沒有回退。PHP Web 應用程序的性能可與其它語言中的 Web 框架相提並論,甚至在某些狀況下更好。你能夠看看這個普遍的基準測試套件

固然 PHP 框架不會賽過 C 和 Rust,但它們比 Rails 或 Django 要好得多,而且與 ExpressJS 至關。

框架和生態系統

說到框架:PHP 可不只僅是 WordPress。讓我告訴你 —— 某些專業的 PHP 開發人員:WordPress 毫不表明當代的 PHP 生態系統。

通常來講,有兩個主要的 Web 應用程序框架,SymfonyLaravel,以及一些較小的應用程序框架。固然還有 Zend、Yii、Cake、Code Igniter 等等,可是若是你想知道現代 PHP 開發是怎麼樣的,這二者之一都是很好的選擇。

這兩個框架都有一個龐大的包和產品的生態系統。從管理面板和 CRM 到獨立軟件包,從 CI 到分析器,以及幾個 Web 套接字服務器、隊列管理器、支付集成等衆多服務。老實說,要列出的內容太多了。

這些框架雖然適用於實際開發。若是你只是須要個內容管理系統(CMS),WordPress 和 CraftCMS 等平臺就夠了。

衡量 PHP 生態系統當前狀態的一種方法是查看 Packagist,這是 PHP 主要的軟件包存儲庫。它如今呈指數級增加。天天下載量達到了 2500 萬次,能夠說 PHP 生態系統已再也不是之前的小型弱勢羣體了。

請查看此圖表,它列出一段時間內的軟件包和版本數量變化。它也能夠在 Packagist 網站上找到它。

除了應用程序框架和 CMS 以外,咱們還看到過去幾年裏異步框架的興起。

這些是用 PHP 或其餘語言編寫的框架和服務器,容許用戶運行真正的異步 PHP,這些例子包括 Swoole(創始人韓天峯),以及 AmpReactPHP

咱們已經進入了異步的世界,像 Web 套接字和具備大量 I/O 的應用程序之類的東西在 PHP 世界中已經變得很是重要。

在內部郵件列表裏(PHP 核心開發人員討論語言開發的地方)已經談到了將 libuv 添加到核心。若是你還不知道 libuv:Node.js 全有賴它提供異步性。

語言自己

雖然還沒有提供 asyncawait,但在過去幾年中,PHP 語言自己已經有了不少改進。這是 PHP 中新功能的非詳盡列表:

當咱們討論語言功能時,咱們還要談談當今該語言的發展過程。雖然社區能夠提出 RFC,可是得有一個活躍的志願者核心團隊才能推着它前進。

接下來,這些 RFC 將在「內部」郵件列表中進行討論,這個郵件列表也能夠在線閱讀。在添加新的語言特性以前,必須進行投票。只有獲得了至少 2/3 多數贊成的 RFC 才能進入核心。

可能有大約 100 人可以投票,但不須要每一個人對每一個 RFC 進行投票。核心團隊的成員固然能夠投票,他們是維護代碼庫的人。除了他們以外,還有一羣人從 PHP 社區中被單獨挑選出來。這些人包括 PHP 文檔的維護者,對 PHP 項目總體有貢獻的人,以及 PHP 社區中的傑出開發人員。

雖然大多數核心開發都是在自願的基礎上完成的,但其中一位核心 PHP 開發人員 Nikita Popov 最近受僱於 JetBrains 全職從事於 PHP 語言的開發。另外一個例子是 Linux 基金會最近決定投資 Zend 框架。像這樣的僱傭和收購確保了 PHP 將來發展的穩定性。

工具

除了核心自己,咱們看到過去幾年中圍繞它的工具備所增長。首先浮現於我腦海中的是靜態分析器,好比由 Vimeo 建立 Psalm,以及 PhanPHPStan

這些工具將靜態分析你的 PHP 代碼並報告任何類型錯誤和可能的錯誤等。在某種程度上,它們提供的功能能夠與 TypeScript 進行比較,可是如今這種語言不能轉譯transpiling,所以不支持使用自定義語法。

儘管這意味着咱們須要依賴 docblocks,可是 PHP 之父 Rasmus Lerdorf 確實提到了添加靜態分析引擎到核心的想法。雖然會有不少潛力,但這是一項艱鉅的任務。

說到轉譯,以及受到 JavaScript 社區的啓發;他們已經努力在用戶領域中擴展 PHP 語法。一個名爲 Pre 的項目正是如此:容許將新的 PHP 語法轉譯爲普通的 PHP 代碼。

雖然這個思路已經在 JavaScript 世界中被證實了,但若是提供了適當的 IDE 和靜態分析支持,它就能在 PHP 中工做了。這是一個很是有趣的想法,但必須發展起來才能稱之爲「主流」。

結語

儘管如此,你仍然能夠將 PHP 視爲一種糟糕的語言。雖然這種語言確定有它的缺點和揹負了 20 年的遺產;但我能夠放膽地說,我喜歡用它工做。

根據個人經驗,我可以建立可靠、可維護和高質量的軟件。我工做的客戶對最終結果感到滿意,「俺也同樣」。

儘管仍然能夠用 PHP 作不少亂七八糟的事情,但我認爲若是明智和正確地使用的話,它是 Web 開發的絕佳選擇。

你不一樣意嗎?讓我知道爲何!你能夠經過 Twitter電子郵件 與我聯繫。


via: stitcher.io/blog/php-in…

做者:Brent 選題:lujun9972 譯者:wxy 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出

相關文章
相關標籤/搜索