PHP還是不是最好的語言?PHP在2019年 - stitcher.io

banq發表於2019-05-16

你還記得流行的“ PHP:糟糕設計的分形 ”部落格文章嗎?我第一次讀它時,我工作在遺留PHP項​​目中。這篇文章讓我想知道我是否應該放棄程式設計,並去做與程式設計完全不同的事情。
幸運的是,我之後很快就能切換工作了,更重要的是,自從5. *天以來,PHP成功地發展了很多。今天,我正在向那些不再使用PHP程式設計,或者陷入遺留專案的人們致敬。
劇透:今天有些事情仍然很糟糕,就像幾乎每種程式語言都有它的怪癖一樣。許多核心功能仍然有不一致的方法簽名,仍然有令人困惑的配置設定,仍有許多開發人員在那裡寫蹩腳的程式碼 - 因為他們必須,或因為他們不知道更好。
今天我想看看光明的一面:讓我們關注已經發生變化的事情以及編寫乾淨和可維護的PHP程式碼的方法。我想請你暫時擱置任何偏見。
之後,您可以像以前一樣自由地思考PHP。雖然在過去的幾年裡你會對PHP的一些改進感到驚訝。

發展

  • PHP每年都會透過新版本積極開發
  • 自PHP 5時代以來的效能增加了一倍,即使不是標榜的三倍
  • 有一個非常活躍的框架,包和平臺的生態系統
  • PHP在過去幾年中新增了許多新功能,並且語言不斷髮展
  • 像靜態分析儀這樣的工具在過去幾年中已經成熟,並且只能保持增長

人們讓我展示一些實際的程式碼。我很高興地說這是可能的!這 是我的一個愛好專案的原始碼,用PHP和Laravel編寫; 而這裡是幾百個,我們在我們的辦公室保持OSS包的列表。兩者都是現代PHP專案的好例子。

歷史回顧
為了更好地評估,讓我們快速回顧一下今天PHP的釋出週期。我們現在的PHP為7.3,預計在2019年底為7.4。PHP 8.0將是7.4之後的下一個版本。
自從5. *時代以來,核心團隊試圖保持每年的釋出週期,並且在過去的四年中成功地這樣做了。
一般來說,每個新版本都會在兩年內得到積極支援,並再獲得一年的“安全修復”。目標是激勵PHP開發人員儘可能保持最新:例如,每年進行小規模升級比在5.4到7.0之間跳轉更容易。
可以在此處找到PHP時間軸的活動概述。
最後,PHP 5.6是最新的5. *版本,7.0是下一個版本。如果您想知道PHP 6發生了什麼,您可以收聽PHP Roundtable播客
有了這個,讓我們揭穿一些關於現代PHP的常見誤解。

PHP的效能
5.*版本以前PHP的表現就是......平均水平。但是在7.0版本中,PHP的核心部分從頭開始重寫,導致效能提升兩到三倍。
我們來看看基準。幸運的是,其他人花了很多時間來對PHP效能進行基準測試。我發現Kinsta有一個很好的更新列表。
自7.0升級以來,效能大幅度提升。PHP Web應用程式與其他語言中的Web框架相比具有可比性 - 在某些情況下更好 - 效能。看看這個廣泛的基準測試套件
當然PHP框架不會勝過C和Rust,但它們比Rails或Django要好得多,並且與ExpressJS相當。

框架和生態系統
說到框架:PHP不僅僅有WordPress了。讓我告訴你一些專業的PHP開發人員:WordPress絕不代表當代生態系統。
一般來說,有兩個主要的Web應用程式框架,以及一些較小的Web應用程式框架:SymfonyLaravel。當然還有Zend,Yii,Cake,Code Igniter等等 - 但是如果你想知道現代PHP開發的樣子,你只要掌握這兩者中的一個就很好。
這兩個框架都有一個龐大的包和產品生態系統。從管理皮膚和CRM到獨立軟體包,CI到分析器,Web套接字伺服器,排隊管理器,支付整合等眾多服務; 老實說,列出的內容太多了。
這些框架雖然適用於實際開發。如果您需要純粹的內容管理,WordPress和CraftCMS等平臺只會越來越多地進行改進。
衡量PHP生態系統當前狀態的一種方法是檢視Packagist,這是PHP的主要軟體包儲存庫。它已呈指數級增長。每天下載量達到2500萬次,可以說PHP生態系統不是以前的小型弱勢群體。
除了應用程式框架和CMS之外,我們還看到過去幾年非同步框架的興起。
這些是用PHP或其他語言編寫的框架和伺服器,允許使用者執行真正的非同步PHP。一些例子包括SwooleAmpReactPHP
由於我們已經進入了非同步世界,因此Web套接字和具有大量IO的應用程式之類的東西在PHP世界中實際上已經變得相關。
內部郵件列表 - 核心開發人員討論語言開發的地方 - 也在談論核心新增libuv。對於那些不瞭解libuv的人:它是Node.js用來允許其所有非同步性的同一個庫。

語言本身
雖然async與await尚未推向市場,大量的改進語言本身已經取得了過去幾年。這是PHP中新功能的非詳盡列表:


當我們討論語言功能時,我們還要談談當今語言的發展過程。雖然社群被允許提出RFC,但是有一個活躍的志願者核心團隊將語言推向前進。
接下來,這些RFC將在“內部”郵件列表中進行討論,該列表也可以線上閱讀。在新增新語言功能之前,必須進行投票。核心中只允許至少具有2/3多數的RFC。
可能有大約100人允許投票,但您不需要對每個RFC進行投票。核心團隊的成員當然可以投票,他們必須維護程式碼庫。除了他們之外,還有一群人從PHP社群中被單獨挑選出來。這些人包括PHP文件的維護者,整個PHP專案的貢獻者,以及PHP社群中的傑出開發人員。
雖然大多數核心開發是在自願的基礎上完成的,但是最近,JetBrains聘請了一位核心PHP開發人員Nikita Popov 來全職學習該語言。另一個例子是最近決定投資Zend框架的Linux基金會。像這樣的僱傭和收購確保了PHP未來發展的穩定性。

工具
除了核心本身,我們看到過去幾年中圍繞它的工具有所增加。我想到的是靜態分析儀,如Psalm,由Vimeo建立; PhanPHPStan
這些工具將靜態分析您的PHP程式碼並報告任何型別錯誤,可能的錯誤等。在某種程度上,它們提供的功能可以與TypeScript進行比較,但是現在語言沒有被轉換,因此不允許使用自定義語法。
雖然這意味著我們需要依賴docblocks,但是PHP的原始建立者Rasmus Lerdorf確實提到了向核心新增靜態分析引擎的想法。雖然會有很多潛力,但這是一項艱鉅的任務。
說到轉換,並受到JavaScript社群的啟發; 已經努力在使用者土地中擴充套件PHP語法。一個名為Pre的專案就是這樣:允許新的PHP語法轉換為普通的PHP程式碼。
雖然這個想法已經在JavaScript世界中證明了,但如果提供了適當的IDE和靜態分析支援,它只能在PHP中工作。這是一個非常有趣的想法,但必須增長才能稱之為“主流”

總結
儘管如此,我們仍然可以將PHP視為一種糟糕的語言。雖然這種語言肯定有它的缺點和20年的遺產隨之而來; 我可以放心地說,我喜歡和它一起工作。
根據我的經驗,我能夠建立可靠,可維護和高質量的軟體。我工作的客戶對最終結果感到滿意,就像我一樣。
儘管仍然可以用PHP做很多混亂的事情,但我認為如果使用明智和正確的話,它是Web開發的絕佳選擇。

相關文章