整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

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

          者 | Brent

          譯者 | 張蘭月

          這篇文章不在于解決關于 PHP 的那個永恒話題,而是想讓你了解,PHP 在這些年的進展以及那些值得關注的特性與發展現狀。

          之前,有一篇非常流行的博客文章是“PHP:那些糟糕的設計”,第一次讀到這篇博客的時候,我正在一個非常破舊的地方工作,處理著許多 PHP 遺留項目。這篇博客對我觸動很深,我開始思考是否要停止編程,換一份完全不同的工作。文章地址:

          https://eev.ee/blog/2012/04/09/php-a-fractal-of-bad-design/

          幸運的是,很快我就換了一份工作,而 PHP 在 5.X 版本之后又有了很多新的改進。今天,我要向那些不再使用 PHP 編程,或者陷入遺留項目的人致敬。

          劇透:直到今天,PHP 仍有很多糟糕的東西,例如許多核心功能仍然存在不一致的方法簽名,仍然存在令人混淆的配置設置,仍然會有一些開發者因為知識的缺乏而導致寫的代碼很糟糕等等。

          但是,本文我想把目光集中在 PHP 已經改進的地方上面,以及如何寫出更加干凈和易維護的 PHP 代碼。也許你不會改變對 PHP 的看法,但很有可能,你會驚訝于過去幾年 PHP 的進步。

          要 點

          • PHP 每年都會推出一個新的版本;
          • 自 PHP 5 代之后,其性能不斷提升;
          • 有框架、包和平臺組成的活躍生態系統;
          • 過去幾年間,PHP 添加了許多新的特性,且現在仍在持續演進;
          • 許多工具如靜態分析器也越發成熟,未來也將繼續發展。

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

          • https://github.com/brendt/aggregate.stitcher.io
          • https://spatie.be/open-source/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/supported-versions.php

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

          PHP 的性能

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

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

          https://github.com/the-benchmarker/web-frameworks

          當然,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 網站上列出了過去的包和版本數量:


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

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

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

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

          語言本身

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

          • 短閉包
          • https://stitcher.io/blog/short-closures-in-php
          • 空合并運算符
          • https://stitcher.io/blog/shorthand-comparisons-in-php#null-coalescing-operator
          • Traits
          • https://www.php.net/manual/en/language.oop5.traits.php
          • 屬性類型
          • https://stitcher.io/blog/new-in-php-74#typed-properties-rfc
          • 擴散運算符
          • 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.returning-values.php#functions.returning-values.type-declaration
          • 現代密碼學
          • https://wiki.php.net/rfc/libsodium
          • Generators
          • https://wiki.php.net/rfc/generators
          • 其他
          • https://www.php.net/ChangeLog-7.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 開發來說是個非常棒的選擇。

          英文原文

          https://stitcher.io/blog/php-in-2019


          彩蛋一

          新浪微博是國內使用 PHP 語言的代表之一,前新浪微博首席架構師惠新宸就是 PHP 開發組的核心成員。2016 年,InfoQ 編輯約稿了新浪微博,分享了新浪微博的 PHP 7 升級實踐以及選型思路。文章年代雖然較為久遠了,但背后的思路和實踐細節依舊值得參考,感興趣的同學可以在 InfoQ 公眾號對話框回復關鍵詞:PHP,獲取文章詳情。

          請在 InfoQ 公眾號對話框回復關鍵詞,留言區回復無法接收的喲!

          彩蛋二

          QCon 全球軟件開發大會廣州站正在火熱進行中,我們為 InfoQ 的讀者匯總了大會 PPT,回復關鍵詞:PPT,即可下載!

          hp與JavaScript的交互方式

          php與JavaScript的交互答題可以分為三種,即:使用php生成JavaScript,使用cookies進行數據交換,使用臨時文件進行數據交換。

          1.php生成JavaScript的方法,可以動態生成JavaScript,使得在服務器端的位置,通過客戶端的JavaScript表現出來提升用戶體驗。

          在使用時注意,php生成JavaScript腳本的語法,不用與JavaScript語法混合。

          2.使用Cookies進行數據交換,可以在php與JavaScript腳本交換小數據量時使用。因為Cookies與腳本代碼無關,php與JavaScript都可以設置和

          讀取Cookie,使得兩種語言在交換數據庫里,變得很簡單。

          3.使用臨時文件進行數據交換,原理與使用Cookie進行數據交換是一樣的,只不過是臨時文件存取的數據量更大,樣式更豐富。但使用臨時文件往往需要

          更多的操作代碼。

          例:使用php生成JavaScript

          <?php

          //使用php生成JavaScript

          $var1 ="我是php變量";

          $var2 ="PHP";

          echo "<script>";

          echo "var jsVar ='我是JavaScript變量';";

          echo "var phpVar ='這是".$var2."與JavaScript組成變量';";

          echo "alert(jsVar);";

          echo "alert('".$var1."');";

          echo "alert(phpVar);";

          echo "</script>";

          ?>

          運行結果


          主站蜘蛛池模板: 少妇人妻精品一区二区三区| 日韩精品视频一区二区三区| 亚洲综合无码一区二区痴汉| 一区 二区 三区 中文字幕| 亚欧免费视频一区二区三区| 国产综合精品一区二区三区| 亚洲一区二区三区乱码A| 亚洲精品精华液一区二区| 亚洲AV无一区二区三区久久| 精品少妇一区二区三区在线| 国产在线精品观看一区| 一区二区传媒有限公司| 在线观看亚洲一区二区| 日韩精品乱码AV一区二区| 国精品无码一区二区三区在线蜜臀| 日本一区午夜爱爱| 国产av福利一区二区三巨| 高清一区二区三区视频| 国产成人精品一区二三区| 国产成人高清亚洲一区91| 精品无码国产一区二区三区麻豆| 天堂Av无码Av一区二区三区| 亚洲色精品VR一区区三区| 中文字幕AV一区二区三区人妻少妇| 亚洲天堂一区在线| 无码国产精品久久一区免费| 日韩精品一区在线| 国产无人区一区二区三区| 无码AV动漫精品一区二区免费| 无码av不卡一区二区三区| 精品伦精品一区二区三区视频| 国产在线观看一区二区三区精品| 国模大尺度视频一区二区| 国产亚洲福利精品一区| 麻豆一区二区99久久久久| 伊人色综合视频一区二区三区| 国产视频一区二区| 国产一区在线视频| 亚洲国产福利精品一区二区| 免费高清av一区二区三区| 国产在线观看一区二区三区 |