編程學習網 > PHP技術 > php基礎 > PHP已不再是當年那個“設計糟糕”的語言
2020
03-12

PHP已不再是當年那個“設計糟糕”的語言

  PHP每年都會推出一個新的版本;

  自PHP 5代之后,其性能不斷提升;

  有框架、包和平臺組成的活躍生態系統;

  過去幾年間,PHP添加了許多新的特性,且現在仍在持續演進;

  許多工具如靜態分析器也越發成熟,未來也將繼續發展。

  更新:很多人希望我能夠展示一下實際代碼,這是我其中一個業余項目的源代碼,它是用PHP和Laravel寫的,另外還有一個是我們在辦公室負責維護的上百個OSS包的列表。

  https://github.com/brendt/aggregate.stitcher.io

  https://spatie.be/opensource/packages

  回顧歷史

  讓我們先快速回顧一下PHP的版本發布周期。現在PHP的版本是7.3,預計2019年末將發布PHP 7.4,7.4之后的版本將會是PHP 8.0。

  從5.X版本之后,PHP核心團隊一直在努力每年發布一個新版本,并且在過去的4年間,這一目標一直完成得很好。

  大致來說,每個新版本都會用2年時間進行積極地支持,然后用一年進行“安全修補”工作。這樣做的目的是促使PHP開發者盡可能保持最新狀態,例如每年都升級比從5.4直接跳到7.0要簡單得多。

  PHP具體的版本發布情況,可以查看:

  https://www.php.net/supportedversions.php

  搞清楚PHP的發展歷程后,我們來談談大家對PHP的常見誤解。

  PHP的性能

  在5.X版本時代,PHP的性能平均而言是最好的。而在7.0時代,大部分的PHP核心都從零開始重寫了,其性能能夠達到之前的23倍。口說無憑,幸運的是,有人花了大量時間來測量PHP的性能,Kinsta提供了一個很好的更新列表。

  從7.0版本以來,PHP性能就只升不降。PHP web應用的性能可以和其他語言web框架的性能相提并論,甚至更高。具體測試情況可查看:

  https://github.com/thebenchmarker/webframeworks

  當然,PHP框架的性能還無法超越C和Rust,但是要比Rails或Django好,且能夠和ExpressJS相媲美。

  框架和生態系統

  在談到框架時,PHP已經不再只是WordPress了。作為職業的PHP開發者,我認為,WordPress無法從任何層面代表當今的生態系統。

  總體來說,有2個主要的web應用框架以及一些相對而言較小的框架,如Symfony和Laravel。除此之后,還有Zend、Yii、Cake、Code Igniter等等。

  如果你想了解現代PHP開發究竟是什么樣子,那么就需要掌握Symfony和Laravel中的一個,這2個框架都有龐大的生態系統,包含各種包和產品。從管理面板和客戶關系管理系統(CRM)到單獨的包,從持續集成(CI)到性能監視工具,我們有無數的服務如web套接字服務器、隊列管理器、支付集成等等。

  但是,這些框架都是為實際開發而設計的。如果你需要純粹的內容管理,WordPress和CraftCMS是理想選擇,而且它們還會不斷優化。

  衡量PHP生態系統目前狀態的方法是看一看Packagist,它是PHP主要的包倉庫。在過去的時間里,它呈現出了指數式增長的態勢,每天2500萬左右的下載量,足以說明PHP生態系統已經不再是過去那種弱者了。

  Packagist網站上列出了過去的包和版本數量:

  2019年了,PHP已不再是當年那個“設計糟糕”的語言

  除了應用框架和內容管理系統(CMS)以外,我們還發現,在過去幾年,異步框架也崛起了。

  異步框架是指用PHP或其它語言編寫的框架和服務器,它們能夠讓用戶運行真正異步的PHP。異步框架的例子包括:Swoole、Amp和ReactPHP。

  由于我們已經進入異步領域,具有大量IO的web套接字和應用等東西在PHP世界中就變得非常重要。

  另外,人們還談到了內部郵件列表,在郵件列表中,PHP核心開發者討論了PHP語言的進一步發展,例如增加libuv到核心之中。對于不熟悉libuv的人來說,libuv同Node.js用于實現其所有異步性的庫一模一樣。

  語言本身

  盡管異步(async)和等待(await)還未面市,但PHP在過去幾年已經經過了許多改進,下面便是PHP新特性的不完全列表:

  短閉包

  https://stitcher.io/blog/shortclosuresinphp

  空合并運算符

  https://stitcher.io/blog/shorthandcomparisonsinphp#nullcoalescingoperator

  Traits

  https://www.php.net/manual/en/language.oop5.traits.php

  屬性類型

  https://stitcher.io/blog/newinphp74#typedpropertiesrfc

  擴散運算符

  https://wiki.php.net/rfc/argument_unpacking

  JIT編譯器

  https://wiki.php.net/rfc/jit

  FFI

  https://wiki.php.net/rfc/ffi

  匿名類

  https://www.php.net/manual/en/language.oop5.anonymous.php

  聲明返回類型

  https://www.php.net/manual/en/functions.returningvalues.php#functions.returningvalues.typedeclaration

  現代密碼學

  https://wiki.php.net/rfc/libsodium

  Generators

  https://wiki.php.net/rfc/generators

  其他

  https://www.php.net/ChangeLog7.php

  盡管我們的主題是PHP的語言特性,但我還是覺得需要談一下PHP語言的開發流程。雖然社區被允許提出RFC,但仍有一個活躍的志愿者核心團隊在推動PHP的發展。在添加一個新的語言特性之前,必須要進行投票。只有獲得2/3多數選票的RFC才能被添加到核心中。

  大約有100個人可以投票,但你不需要給每個RFC投票。核心團隊的成員毋庸置疑能夠投票,因為他們必須維護代碼庫。除了他們以外,還有一群人是單獨從PHP社區中挑選出來的,這些人員包括PHP文件的維護人員,PHP整體項目的貢獻者,以及PHP社區中頗具威望的開發者。

  雖然大多數核心開發是由志愿者組成的,但其中一名核心PHP開發者Nikita Popov近期被JetBrains雇傭,并全職負責該語言的開發。另外一個例子是Linux基金會決定投資Zend框架。上述這些雇傭和收購行為確保了未來PHP開發的穩定性。

  工具

  除了核心本身,我們還目睹了過去幾年間工具的增長。首先進入我腦海的是靜態分析器如Vimeo發明的Psalm,以及Phan和PHPStan。

  這些工具能夠靜態分析PHP代碼,并且報告打字錯誤、可能的bug等等。在某些方面,它們提供的功能足以和TypeScript相媲美,但目前PHP還沒有被轉編譯(transpile),因此它并不支持定制句法。

  雖然這意味著我們必須依賴于文檔塊,但PHP的最初發明者Rasmus Lerdorf提出了將靜態分析引擎添加到核心之中的想法。這個想法潛力巨大,但任務量著實不小。

  提到轉編譯,由于受到JavaScript社區的啟發,有許多人試圖將PHP句法延伸到用戶空間中。一個名叫Pre的項目就做了這件事情:它支持新的已經轉編譯為普通PHP代碼的PHP句法。

  雖然這一想法已經在JavaScript中得以實現,但只有在提供了適當的集成開發環境(IDE)和靜態分析支持后,它才能在PHP工作。這一想法非常有趣,但還必須不斷完善,才能變成“主流”。

  結束語

  盡管PHP還有很多缺點和遺留問題,但我可以充滿信心地說,我喜歡使用它。就我的經驗來看,它可以創建可靠、可維護和高質量的軟件。如果使用得當,PHP對于web開發來說是個非常棒的選擇。

掃碼二維碼 獲取免費視頻學習資料

Python編程學習

查 看2022高級編程視頻教程免費獲取