0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

與Java相比更具爭議的PHP

5RJg_mcuworld ? 來源:fqj ? 2019-05-20 17:16 ? 次閱讀

編程語言之爭自古以來就從未停歇,對于有著“世界上最好的編程語言”之稱的 PHP,表面看似贊揚(yáng),實(shí)則為諷刺。PHP 確實(shí)簡單易上手,但是其函數(shù)命名不規(guī)范、核心異步網(wǎng)絡(luò)不支持、后期維護(hù)困難等缺點(diǎn),讓不少開發(fā)者避之不及。不過,PHP 經(jīng)過了這么多年的發(fā)展,還是槽點(diǎn)滿滿嗎?

你還記得幾年前流行的那篇名為“全面解析PHP的糟糕設(shè)計(PHP: a fractal of bad design)”博客文章嗎?當(dāng)我第一次讀它的時候,我在一個不入流的公司工作,那里有很多老舊的PHP項(xiàng)目。這篇文章讓我思考我是否應(yīng)該放棄編程,去做一些完全不同的事情。

幸運(yùn)的是,我很快地就換了份工作。更重要的是,自5.*版本后,PHP有了長足的發(fā)展。今天,我想向那些不再使用PHP編程,或者仍然在老舊項(xiàng)目中蹣跚躑躅的人分享我的一些切身體會。

劇透一下:今天的PHP依然有些很糟糕的設(shè)計,就像幾乎所有的編程語言都有它的怪癖一樣。很多PHP核心函數(shù)的方法簽名仍然不一致,它的配置設(shè)置仍然很混亂,許多開發(fā)人員仍在編寫蹩腳的PHP代碼,因?yàn)樗麄儾坏貌贿@樣做,或者因?yàn)樗麄儾涣私飧玫膶懛ā?/p>

今天我想在這里分享的是PHP的陽光的一面,讓我們把注意力放在那些已經(jīng)發(fā)生了變化的地方,以及可以幫助大家編寫干凈且可維護(hù)的PHP代碼的方法。接下來的幾分鐘內(nèi),我希望大家先拋開任何偏見來閱讀。

讀完會,你可以自由地和以前一樣思考PHP。盡管有很大的機(jī)會,你會對過去幾年P(guān)HP所取得的下列進(jìn)步感到驚訝:

每年都會有一個新的PHP版本在活躍地開發(fā)。

新的PHP性能至少是PHP5時代的兩倍,可能已經(jīng)達(dá)到了三倍。

有一個非?;钴S的涵蓋了框架、包和平臺的生態(tài)系統(tǒng)。

在過去的幾年里,PHP增加了許多新特性,并且語言自身在不斷發(fā)展。

靜態(tài)分析工具在過去幾年已經(jīng)成熟,并且會不斷增長。

下面我會附上我的一個業(yè)余項(xiàng)目的源代碼來解釋說明,它是用PHP和Laravel編寫。這里是我們在辦公室維護(hù)的幾百個OSS包的列表。這兩個都是現(xiàn)代PHP項(xiàng)目的好例子。

讓我們開始吧。

歷史總結(jié)

為了更好地衡量,讓我們今天快速回顧一下PHP的發(fā)布周期。我們現(xiàn)在使用的是PHP 7.3版本,預(yù)計2019年底將發(fā)布7.4版本。而PHP 8.0版本將是7.4版本之后的下一個版本。

從5.* 時代后期開始,PHP核心開發(fā)團(tuán)隊就努力保持一年一個新版本的發(fā)布周期,并且在過去的四年中成功地做到了這一點(diǎn)。

總的來說,每一個新版本都會得到核心團(tuán)隊兩年的積極支持,再加上一年的“僅提供安全補(bǔ)丁”的支持。目標(biāo)是鼓勵PHP開發(fā)人員盡可能地使用最新版本。因?yàn)槊磕赀M(jìn)行小的升級要比從5.4版本直接升級到7.0版本容易得多。

最后提一下,PHP 5.6是5.* 的最后一個版本,它的下一個版本就是7.0版。如果你想知道PHP 6發(fā)生了什么,可以收聽PHP Roundtable上的這個播客音頻。

從那里,我們可以認(rèn)清關(guān)于現(xiàn)代PHP的一些常見誤解。

PHP的性能

回到PHP 5.*時代,那時候PHP的性能在最好的情況下也只是中等。然而,到了7.0版本后,PHP核心的大部分被從頭開始重寫,這將它的性能提高了兩到三倍。

光用言語不能證明這一點(diǎn)。讓我們看看基準(zhǔn)測試的結(jié)果。幸運(yùn)的是,有人在PHP性能的基準(zhǔn)測試上投入了大量時間。我發(fā)現(xiàn)Kinsta的這篇文章提供了一個最新的不同版本的性能比較列表。

自從7.0升級以來,性能提高了如些之多。以至于PHPWeb應(yīng)用程序的性能已經(jīng)可以和其他語言的Web框架相當(dāng)(在某些情況下甚至更好)??纯催@個擴(kuò)展的基準(zhǔn)測試套件,可以得到更多信息

當(dāng)然,PHP框架在性能上不會優(yōu)于C和Rust,但是它們確實(shí)比Rails或Django要好得多,并且與ExpressJS相當(dāng)。

框架和生態(tài)系統(tǒng)

說到框架:PHP不再只是WordPress了。作為一個專業(yè)的PHP開發(fā)人員,讓我告訴你一件事:WordPress在任何方面都不再能代表當(dāng)代的PHP生態(tài)系統(tǒng)。

總的來說,PHP有兩個主要的Web應(yīng)用程序框架:Symfony和Laravel。當(dāng)然還有幾個較小的框架,如Zend, Yii, Cake,Code Igniter等等。但是如果你想了解現(xiàn)代PHP開發(fā)是什么樣子,你最好擅長使用這兩個主要框架中的一個。

這兩個框架都有一個由軟件包和產(chǎn)品組成的大型生態(tài)系統(tǒng)。從管理面板,CRM,到獨(dú)立軟件包,從CodeIgniter(簡稱CI)到profiler,從Web套接字服務(wù)器、隊列管理器、至支付集成等眾多服務(wù)。老實(shí)說,這里有太多要列出的內(nèi)容。

不過,這些框架都是為實(shí)際開發(fā)需要而設(shè)計的。如果你需要純粹的內(nèi)容管理,像WordPress和CraftCMS這樣的平臺只會越來越完善。

衡量PHP生態(tài)系統(tǒng)當(dāng)前狀態(tài)的一種方法是查看Packagist,它是PHP主要軟件包的代碼倉庫。它現(xiàn)在以指數(shù)級別快速增長。每天下載量為2500萬次,可以公平地說,PHP生態(tài)系統(tǒng)已經(jīng)不像以前那樣地處于劣勢。

下面這張圖展示了隨著時間的推移,包和版本的數(shù)量增長情況。這張圖可以在Packagist官網(wǎng)上找到。

與Java相比更具爭議的PHP

除了應(yīng)用程序框架和CMS之外,我們還看到了異步框架在過去幾年的興起。

這些用PHP或其他語言編寫的框架和服務(wù)器,允許用戶運(yùn)行真正的異步PHP。異步框架的例子包括Swoole、Amp和ReactPHP。

我們已經(jīng)步入了一個異步編程的世界,像Web套接字和具有大量IO的應(yīng)用程序之類的東西實(shí)際上已經(jīng)越來越被PHP世界所關(guān)注。

PHP內(nèi)部郵件列表-這個核心開發(fā)人員討論語言開發(fā)的地方,也在討論把libuv添加到內(nèi)核中來支持異步編程。對于那些不了解libuv的人來說,可以認(rèn)為libuv是Node.js用于允許所有異步性的一個庫。

PHP語言本身

雖然async和await這兩個特性現(xiàn)在還不可用,但是在過去的幾年里,PHP語言本身已經(jīng)有了很多改進(jìn)。

當(dāng)我們討論編程語言特性的主題時,讓我們也來談?wù)劗?dāng)今編程語言的發(fā)展過程。首先有一個活躍的核心志愿者團(tuán)隊,他們推動了編程語言的發(fā)展。同時開發(fā)社區(qū)成員可以提出RFC。

接下來,這些RFC 會在“內(nèi)部”郵件列表中討論,郵件列表可以在線閱讀。在新的語言特性被添加之前,必須進(jìn)行投票。只有得到三分之二核心團(tuán)隊同意的RFC才允許被添加進(jìn)來。

允許投票的可能有約100人,但是并不要求每個人都對每個RFC投票。核心團(tuán)隊的成員當(dāng)然可以投票,因?yàn)樗麄儽仨毦S護(hù)代碼庫。除了他們之外,還有從PHP社區(qū)中單獨(dú)挑選出來的人可以投票。這些人包括PHP文檔的維護(hù)者、整個PHP項(xiàng)目的貢獻(xiàn)者以及PHP社區(qū)中的杰出開發(fā)人員。

雖然大多數(shù)核心開發(fā)都是在自愿的基礎(chǔ)上完成的,但最近JetBrains雇傭了一名核心PHP開發(fā)人員Nikita Popov來做全職開發(fā)工作。另一個例子是Linux基金會最近決定投資Zend Framework開源框架。這樣的雇傭和收購確保了PHP未來發(fā)展的穩(wěn)定性。

工具

除了PHP核心本身,在過去的幾年里,我們看到了圍繞PHP開發(fā)的工具的增加。首先我們想到的是靜態(tài)代碼分析工具,像Vimeo團(tuán)隊開發(fā)的Psalm,以及Phan和PHPStan。

這些工具將靜態(tài)分析你的PHP代碼并報告任何類型錯誤,以及可能導(dǎo)致的bug等等。在某種程度上,它們提供的功能可以與TypeScript相媲美。但是PHP現(xiàn)在不提供轉(zhuǎn)換(transpile),所以不允許使用自定義語法。

盡管這意味著我們需要依賴docblocks,但是PHP之父Rasmus Lerdorf確實(shí)提到了在核心中添加靜態(tài)分析引擎的想法。雖然潛力巨大,但這也是一項(xiàng)艱巨的任務(wù)。

說到轉(zhuǎn)換(transpiling)。受到 JavaScript 社區(qū)的啟發(fā),目前 已經(jīng)已經(jīng)有人開始在用戶領(lǐng)域擴(kuò)展PHP語法。一個名為Pre的項(xiàng)目就是這樣做的,它允許新的PHP語法轉(zhuǎn)換為普通的 PHP 代碼。

雖然這個想法已經(jīng)在 JavaScript 中被證明可行,但是只有先提供了適當(dāng)?shù)腎DE和靜態(tài)分析支持,它才能在PHP中工作。這是一個非常有趣的想法,但它必須經(jīng)歷一個成長過程才能稱為“主流”。

結(jié)語

雖然說了這么多,但是你仍然可以把PHP看作是一種蹩腳的語言。這門語言確實(shí)有其缺點(diǎn)和20年的傳承包袱,但是我可以自信地說,我喜歡用它工作。

根據(jù)我的經(jīng)驗(yàn),我能夠用它來創(chuàng)建可靠的,可維護(hù)的和高質(zhì)量的軟件。我為之工作的客戶和我一樣,他們對最終的結(jié)果很滿意。

雖然用PHP仍然可能做出很多混亂的事情,但如果使用得當(dāng)和正確的話,我會說這是Web開發(fā)的一個很好的選擇。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • JAVA
    +關(guān)注

    關(guān)注

    19

    文章

    2948

    瀏覽量

    104377
  • PHP
    PHP
    +關(guān)注

    關(guān)注

    0

    文章

    452

    瀏覽量

    26615

原文標(biāo)題:比 Java 更具爭議的 PHP,處處留坑?

文章出處:【微信號:mcuworld,微信公眾號:嵌入式資訊精選】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    php是什么

    中,并在服務(wù)器端執(zhí)行。PHP的設(shè)計靈感來源于C語言,同時也吸取了Java和Perl等其他語 言的特點(diǎn),形成了獨(dú)特的語法結(jié)構(gòu)。這種語言特別適合于Web應(yīng)用程序的開發(fā),因?yàn)樗试S開發(fā)者快速地構(gòu)建動態(tài)網(wǎng)
    發(fā)表于 01-30 16:33

    php生成動態(tài)網(wǎng)頁內(nèi)容的方法

    。與靜態(tài)網(wǎng)頁相比,動態(tài)網(wǎng)頁可以根據(jù)特定條件生成不同的內(nèi)容。 PHP的基本概念和語法 PHP是一種服務(wù)器端腳本語言,它可以嵌入到HTML中。PHP文件通常以.
    的頭像 發(fā)表于 12-04 16:22 ?773次閱讀

    php編程用什么軟件

    PHP編程過程中,有許多不同的開發(fā)軟件可供選擇。以下是一些常用的PHP開發(fā)工具,它們可以幫助程序員編寫、調(diào)試和測試PHP代碼。 PHPStorm PHPStorm是一款強(qiáng)大的集成開發(fā)環(huán)境(IDE
    的頭像 發(fā)表于 12-04 16:20 ?2553次閱讀

    php的優(yōu)點(diǎn)和缺點(diǎn)分別是什么

    PHP是一種廣泛應(yīng)用于Web開發(fā)領(lǐng)域的腳本語言,它有著許多獨(dú)有的優(yōu)點(diǎn)和缺點(diǎn)。 一、PHP的優(yōu)點(diǎn): 1.易于學(xué)習(xí)和使用:PHP語法簡單易懂,類似于C語言,對于初學(xué)者來說是一門理想的語言。即使對沒有編程
    的頭像 發(fā)表于 12-04 16:16 ?2155次閱讀

    php的源碼是什么開源語言

    PHP的源碼是用C語言編寫的,是一種開源的服務(wù)器端腳本語言。下面是關(guān)于PHP源碼的詳細(xì)介紹。 一、PHP簡介 PHP(全稱:PHP: Hyp
    的頭像 發(fā)表于 12-04 16:11 ?1545次閱讀

    php的mysql無法啟動

    MySQL是一種常用的關(guān)系型數(shù)據(jù)庫管理系統(tǒng),而PHP是一種廣泛應(yīng)用于服務(wù)器端的腳本語言。在使用PHP開發(fā)網(wǎng)站或應(yīng)用時,經(jīng)常會碰到MySQL無法啟動的問題。本文將詳細(xì)介紹解決MySQL無法啟動的方法
    的頭像 發(fā)表于 12-04 15:59 ?1283次閱讀

    php的源碼是開放的嗎

    PHP是一種開源的腳本語言,其源代碼完全開放并可免費(fèi)獲取、使用和修改。這篇文章將詳細(xì)介紹PHP的源碼開放性。 一、PHP的源碼開放性 PHP的源碼是以
    的頭像 發(fā)表于 12-04 15:57 ?1126次閱讀

    php的配置文件是什么

    PHP的配置文件是一種用于配置PHP解釋器的文本文件。它包含了一系列的指令和選項(xiàng),用于影響PHP的行為和性能。通過修改配置文件,可以改變PHP解釋器的默認(rèn)行為,從而滿足不同的需求。 在
    的頭像 發(fā)表于 12-04 15:55 ?1416次閱讀

    php的適用范圍

    網(wǎng)頁還是復(fù)雜的Web應(yīng)用,PHP都可以勝任。它可以與HTML嵌入使用,使網(wǎng)頁內(nèi)容動態(tài)生成。與其他編程語言相比PHP的語法相對簡單,上手難度較低,因此很多初學(xué)者選擇PHP作為編程語言。
    的頭像 發(fā)表于 12-04 15:54 ?467次閱讀

    php的特點(diǎn)有哪些

    ,如今已經(jīng)成為最流行的Web開發(fā)語言之一。以下將詳細(xì)介紹PHP的特點(diǎn)。 1.易學(xué)易用:PHP語法簡單易懂,與其他編程語言相比,學(xué)習(xí)和使用PHP非常容易。它使用的是C語言的風(fēng)格,所以對于
    的頭像 發(fā)表于 12-04 15:50 ?1379次閱讀

    php是前端還是后端

    PHP(Hypertext Preprocessor)是一種流行的服務(wù)器端編程語言,用于開發(fā)動態(tài)網(wǎng)站和Web應(yīng)用程序。盡管在某些情況下也可以在前端使用,但PHP主要被廣泛應(yīng)用于后端開發(fā)。在這篇文章中
    的頭像 發(fā)表于 12-04 15:46 ?2147次閱讀

    php運(yùn)行機(jī)制和原理

    PHP是一種在服務(wù)器端執(zhí)行的腳本語言,它被廣泛用于開發(fā)動態(tài)網(wǎng)站。它的運(yùn)行機(jī)制和原理非常重要,因?yàn)樗鼪Q定了PHP腳本如何被解釋執(zhí)行和與服務(wù)器進(jìn)行交互。 PHP的運(yùn)行機(jī)制 PHP腳本的運(yùn)行
    的頭像 發(fā)表于 12-04 15:28 ?838次閱讀

    php運(yùn)行環(huán)境的配置步驟

    PHP是一種廣泛使用的服務(wù)器端腳本語言,被用來開發(fā)Web應(yīng)用程序。為了在計算機(jī)上運(yùn)行PHP代碼,我們需要配置PHP運(yùn)行環(huán)境。本文將詳細(xì)介紹PHP運(yùn)行環(huán)境的配置步驟。 下載
    的頭像 發(fā)表于 12-04 15:27 ?1074次閱讀

    php運(yùn)行環(huán)境本地測試地址是

    PHP運(yùn)行環(huán)境本地測試地址是指在本地計算機(jī)上搭建的用于測試和運(yùn)行PHP代碼的的環(huán)境地址。搭建該運(yùn)行環(huán)境可以方便開發(fā)人員在本地進(jìn)行開發(fā)、調(diào)試和測試工作,以提高開發(fā)效率和優(yōu)化代碼質(zhì)量。本文將詳細(xì)介紹
    的頭像 發(fā)表于 12-04 15:25 ?633次閱讀

    php運(yùn)行環(huán)境的搭建方法

    搭建PHP運(yùn)行環(huán)境是開發(fā)PHP應(yīng)用程序的基礎(chǔ),本文將詳盡、詳實(shí)、細(xì)致地介紹從零開始搭建PHP運(yùn)行環(huán)境的方法,包括選擇操作系統(tǒng)、安裝Web服務(wù)器、安裝PHP以及配置相關(guān)組件等。 首先,選
    的頭像 發(fā)表于 12-04 14:56 ?1166次閱讀