9102 年的 PHP

Brent發表於2019-05-18

你還記得篇流行的部落格文章《PHP:設計糟糕的分形》嗎?我第一次讀到它時,我在一個有很多遺留的 PHP 專案的糟糕地方工作。這篇文章讓我覺得我是否應該放棄,並去做與程式設計完全不同的事情。

還好,我之後很快就換了工作,更重要的是,自從 5.x 版本以來,PHP 成功地進步了很多。今天,我在向那些不再使用 PHP 程式設計,或者陷入遺留專案的人們致意。

劇透:今天有些事情仍然很糟糕,就像幾乎每種程式語言都有它的怪癖一樣。許多核心功能仍然有不一致的呼叫方法,仍然有令人困惑的配置設定,仍然有許多開發人員在那裡寫蹩腳的程式碼 —— 因為他們必須如此,或是他們不知道更好的寫法。

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

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

提前看結論

  • PHP 在積極地開發,每年都有新版本
  • 自 PHP 5 時代以來的效能已經翻倍,如果不是三倍的話
  • 有一個非常活躍的框架、包和平臺的生態系統
  • PHP 在過去幾年中新增了許多新功能,並且這種語言在不斷髮展
  • 像靜態分析這樣的工具在過去幾年中已經成熟,並且一直保持增長 更新:人們讓我展示一些實際的程式碼。我覺得這沒問題!這是我的一個業餘專案的原始碼,用 PHP 和 Laravel 編寫的;這裡列出了我們在辦公室維護的幾百個自由開源軟體包。這兩者都是現代 PHP 專案的好例子。

那讓我們開始吧。

歷史總結

出於更好地衡量的目的,讓我們快速回顧一下如今的 PHP 釋出週期。我們現在的 PHP 為 7.3,預計在 2019 年底為 7.4。PHP 8.0 將是 7.4 之後的下一個版本。

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

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

可以在 這裡 找到 PHP 時間軸的活動概述。

9102 年的 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 中新功能的非詳盡列表:

  • 短閉包(箭頭函式)
  • Null 合併運算子??
  • Trait(一種程式碼重用方式)
  • 屬性型別
  • 展開運算子(引數解包 ...
  • JIT 編譯器(即時編譯器)
  • FFI(外部函式介面)
  • 匿名類
  • 返回型別宣告
  • 現代化的加密支援
  • 生成器
  • 等等

當我們討論語言功能時,我們還要談談當今該語言的發展過程。雖然社群可以提出 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: https://stitcher.io/blog/php-in-2019

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

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

9102 年的 PHP

相關文章