PHP還是不是最好的語言?PHP在2019年 - stitcher.io
你還記得流行的“ 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應用程式框架:Symfony和Laravel。當然還有Zend,Yii,Cake,Code Igniter等等 - 但是如果你想知道現代PHP開發的樣子,你只要掌握這兩者中的一個就很好。
這兩個框架都有一個龐大的包和產品生態系統。從管理皮膚和CRM到獨立軟體包,CI到分析器,Web套接字伺服器,排隊管理器,支付整合等眾多服務; 老實說,列出的內容太多了。
這些框架雖然適用於實際開發。如果您需要純粹的內容管理,WordPress和CraftCMS等平臺只會越來越多地進行改進。
衡量PHP生態系統當前狀態的一種方法是檢視Packagist,這是PHP的主要軟體包儲存庫。它已呈指數級增長。每天下載量達到2500萬次,可以說PHP生態系統不是以前的小型弱勢群體。
除了應用程式框架和CMS之外,我們還看到過去幾年非同步框架的興起。
這些是用PHP或其他語言編寫的框架和伺服器,允許使用者執行真正的非同步PHP。一些例子包括Swoole,Amp和ReactPHP。
由於我們已經進入了非同步世界,因此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建立; Phan和PHPStan。
這些工具將靜態分析您的PHP程式碼並報告任何型別錯誤,可能的錯誤等。在某種程度上,它們提供的功能可以與TypeScript進行比較,但是現在語言沒有被轉換,因此不允許使用自定義語法。
雖然這意味著我們需要依賴docblocks,但是PHP的原始建立者Rasmus Lerdorf確實提到了向核心新增靜態分析引擎的想法。雖然會有很多潛力,但這是一項艱鉅的任務。
說到轉換,並受到JavaScript社群的啟發; 已經努力在使用者土地中擴充套件PHP語法。一個名為Pre的專案就是這樣:允許新的PHP語法轉換為普通的PHP程式碼。
雖然這個想法已經在JavaScript世界中證明了,但如果提供了適當的IDE和靜態分析支援,它只能在PHP中工作。這是一個非常有趣的想法,但必須增長才能稱之為“主流”
總結
儘管如此,我們仍然可以將PHP視為一種糟糕的語言。雖然這種語言肯定有它的缺點和20年的遺產隨之而來; 我可以放心地說,我喜歡和它一起工作。
根據我的經驗,我能夠建立可靠,可維護和高質量的軟體。我工作的客戶對最終結果感到滿意,就像我一樣。
儘管仍然可以用PHP做很多混亂的事情,但我認為如果使用明智和正確的話,它是Web開發的絕佳選擇。
相關文章
- PHP是世界上最好的語言PHP
- 它是世界上最好的語言,吊打PHP那種PHP
- 世界上最好的語言PHP已在我掌控之下PHP
- 世界上最好的語言PHP 爆出高危漏洞:你信嗎?PHP
- 為什麼說php是最糟糕的,也是最好的程式語言PHP
- PHP快速上手(03):PHP語言基礎PHP
- goto 語法在 PHP 中的使用GoPHP
- 世界上最好的語言PHP:我也可以用OpenCV搞計算機視覺PHPOpenCV計算機視覺
- 用 PHP 寫一個"程式語言"PHP
- PHP 並非好的入門程式語言PHP
- 初學IT程式設計,C基礎,php世界最好,如何選擇具有發展前景的語言?程式設計PHP
- 【開發語言】PHP、Java、C語言的編譯執行過程PHPJavaC語言編譯
- php判斷變數是不是null的方法PHP變數Null
- 複習PHP-語言參考-常量PHP
- 兄弟們還在繼續寫php嗎?PHP
- 思否有約丨@洪光光:PHP 是世界上最好的語言,我搬著全世界最香的磚PHP
- [精選]當PHP遇上Go會怎樣?GO語言彌補了PHP的不足,然後。。。PHPGo
- 【Go語言入門系列】(八)Go語言是不是面嚮物件語言?Go物件
- PHP 程式設計師轉 Go 語言的經歷分享PHP程式設計師Go
- PHP、www6662016comJava 還是 18288006666Python?微信公眾號首選語言PHPJavaPython
- PYPL 6月程式語言排行:Kotlin與PHP亮了KotlinPHP
- 程式語言對比手冊(橫向版)[-PHP-]PHP
- 《PHP學習筆記——PHP基本語法》PHP筆記
- 自學PHP筆記(一)PHP語法PHP筆記
- 飛機的 PHP 學習筆記之語言基礎篇PHP筆記
- 採用 PHP-quickorm/Captcha,用最快的速度在 PHP 語言下實現驗證碼功能PHPUIORMAPT
- PHP基本語法PHP
- PHP熟手使用Rust作為後端開發語言PHPRust後端
- 使用PHP實現詞法分析與自定義語言PHP詞法分析
- 最好的語言也敵不過人類愚蠢:使用PHPStan通過靜態分析儘早捕獲PHP錯誤 - madewithlovePHP
- 自學PHP筆記(一)PHP基本語法PHP筆記
- 在 PHP 中格式化並高亮 SQL 語句PHPSQL
- PHP驗證碼的語言包&預警資訊通知總結PHP
- php中return語句的使用PHP
- Java、Python到底誰是最好的程式語言?JavaPython
- F#是當今最好的程式語言?
- PHP語言呼叫翔雲身份證實名認證介面PHP
- 複習PHP-語言參考-預定義變數PHP變數