新聞中心
我寫這篇文章有段時(shí)間了,這里改改那里改改,但就是不知道什么時(shí)候發(fā)表。最近PHP 8發(fā)行,讓我覺得現(xiàn)在“是時(shí)候了”。

創(chuàng)新互聯(lián)建站專注于巴馬企業(yè)網(wǎng)站建設(shè),成都響應(yīng)式網(wǎng)站建設(shè)公司,成都商城網(wǎng)站開發(fā)。巴馬網(wǎng)站建設(shè)公司,為巴馬等地區(qū)提供建站服務(wù)。全流程定制網(wǎng)站,專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,創(chuàng)新互聯(lián)建站專業(yè)和態(tài)度為您提供的服務(wù)
每個(gè)月我都會(huì)看到有人說PHP正在逐漸過時(shí),我們不應(yīng)該在使用它。如果你在一些論壇或者Stack Overflow上看到關(guān)于“學(xué)習(xí)PHP”的問題,百分百會(huì)看到有人發(fā)類似“為什么會(huì)想要學(xué)PHP?學(xué)點(diǎn)牛的不香嗎,比如說‘某牛語(yǔ)言’”的言論。
我寫PHP將近20年了(可能更久,我不太記得我什么時(shí)候開始的了)。在用其他語(yǔ)言的時(shí)候,大多數(shù)情況下,我都會(huì)直接忽略對(duì)話的大部分內(nèi)容。這么多年來,PHP都在漸漸“失去生命力”,我早就應(yīng)該不用它了。在任何語(yǔ)言上我都稱不上是專家,關(guān)于PHP我還有很多要學(xué)的,但是我發(fā)現(xiàn)自己一次又一次地選擇它。
偶爾讀到一些寫的不錯(cuò)的勸人不要使用PHP的文章時(shí),我也幾乎被說服了,所以我花了很多時(shí)間去學(xué)習(xí)其他語(yǔ)言。我必須承認(rèn)這些探索使我收獲頗豐。雖然我可能在使用上永遠(yuǎn)也達(dá)不到專家級(jí)水平,但是通過學(xué)習(xí)其他語(yǔ)言,我對(duì)程序員這個(gè)職業(yè)有了更深的理解。
如果說從這篇文章中有什么東西要學(xué)的話,那就是:去學(xué)新的語(yǔ)言。但是不是因?yàn)椤癙HP失去生命力了”——這是錯(cuò)誤的觀點(diǎn)。你要學(xué)習(xí)其他的語(yǔ)言是因?yàn)檫@對(duì)于作為程序員的你有好處,如果PHP真的要沒戲了,那么你更應(yīng)該去學(xué)別的語(yǔ)言。但是此時(shí)此刻,它并沒有失去生命力。
對(duì)于很多寫PHP的程序員來說,當(dāng)他們需要捍衛(wèi)自己的選擇時(shí),他們可能最先會(huì)亮出一些表格,這些表格顯示了PHP在全網(wǎng)的歡迎程度。雖然這些數(shù)字很振奮人心,我還是有些懷疑它們帶有誤導(dǎo)性。
我們必須要認(rèn)識(shí)到PHP受歡迎,是因?yàn)槿藗儗?duì)于WordPress的喜愛。無論你喜歡不喜歡WordPress,都必須承認(rèn)它的存在至關(guān)重要。但是說實(shí)話,WordPress還是有很多缺陷的,并且不在少數(shù)。但是我知道很多人都用WordPress完成很多了不起的事情,也賺了不少錢。
PHP不是WordPress,即使WordPress深深植根于PHP歷史的土壤中,PHP要比WordPress好得多,好得多得多的多。WordPress有很多不足的地方,PHP也有很多不足的地方,但這并不意味著它們不適用于所有項(xiàng)目。
我一般不會(huì)用C++去寫網(wǎng)絡(luò)程序,至少它會(huì)排在我選擇清單的末尾。但這不是說C++就是種不好的語(yǔ)言,它只是不適用而已,就像我不會(huì)用PHP去寫硬件驅(qū)動(dòng)或任何和AI有關(guān)的東西,這已經(jīng)超出了它的能力范圍了。
對(duì)語(yǔ)言的選擇當(dāng)然也和你自身對(duì)它們的掌握程度緊密相連。就像老話說的那樣:時(shí)間就是金錢,用新學(xué)的語(yǔ)言去進(jìn)行一個(gè)項(xiàng)目往往是艱巨的,這會(huì)讓本來就很緊張的時(shí)間雪上加霜。
我對(duì)PHP比較熟悉,所以我往往先選擇它。我略懂一點(diǎn)Python,但是我寫PHP要得心應(yīng)手得多。同一項(xiàng)任務(wù)我也可以選Python,但是花費(fèi)的時(shí)間可能會(huì)是兩倍(至少剛開始是這樣的)。這并不是說我之后都不會(huì)使用Python或者我對(duì)Python有什么不滿的,只是說PHP是我的首選。
學(xué)習(xí)一門編程語(yǔ)言并沒有那么難,一個(gè)有經(jīng)驗(yàn)的程序員可能花上一個(gè)周末就能掌握一門語(yǔ)言的要點(diǎn)。但是這并不意味著他們懂這門語(yǔ)言。了解哪個(gè)內(nèi)置函數(shù)做什么不叫懂一門語(yǔ)言,你必須要有足夠的經(jīng)驗(yàn)知道什么時(shí)候用什么樣的特性,或者明確這整個(gè)生態(tài)系統(tǒng)如何結(jié)合在一起。
我懂PHP,但我也知道如何設(shè)置一個(gè)Nginx web服務(wù)器、如何配置FPM或opcache。我掌握的足夠多,有能力擺脫依賴的影響,做出正確的選擇。我知道如何在生產(chǎn)環(huán)境中安全地部署PHP應(yīng)用程序,而且我知道如果不小心使用某些語(yǔ)言特性,可能會(huì)帶來安全問題。這些事情不僅僅是“了解”一門語(yǔ)言就能夠知道的。作為程序員,我們需要投入大量的時(shí)間來學(xué)習(xí)我們選擇的這些語(yǔ)言之外的東西。
這就是為什么當(dāng)有的程序員說你選的語(yǔ)言就是“垃圾”,我會(huì)感到非常失望。我花了二十年的時(shí)間去在磨練這方面的技術(shù),現(xiàn)在卻來了個(gè)人告訴我,我的選擇是錯(cuò)誤的?
其實(shí)這并不是錯(cuò)誤的選擇,PHP給我?guī)砹藵M意的工作。我之所以能住上漂亮的房子,能開著豪華的轎車,正是因?yàn)槲一?0年時(shí)間精通PHP。扯遠(yuǎn)了,應(yīng)該接著講為什么PHP不是垃圾的。
很多討厭PHP并認(rèn)為它應(yīng)該被淘汰的人,會(huì)列很多點(diǎn)來證明PHP是大錯(cuò)特錯(cuò)的選擇。有很多我們這幾年來一直聽到的觀點(diǎn)都是針對(duì)PHP的骨灰版本(我不知道為什么每個(gè)人都還抓著PHP4不放,搞啥呢?)。
還有些點(diǎn)根本就是無稽之談甚至是錯(cuò)誤的。這不是爭(zhēng)奪“我的編程語(yǔ)言比你好”大賽,不需要歇斯底里,我打心底里認(rèn)為每一種編程語(yǔ)言都有它本身的使命。那些發(fā)明這些語(yǔ)言的人(也就是那些比我聰明得多的人)發(fā)明這些語(yǔ)言都是有原因的,編程語(yǔ)言不是隨隨便便就能被搞出來的東西。
那么,為什么要選PHP呢?
答案很明了:因?yàn)樗驮谀抢铩N沂亲詫W(xué)PHP的,沒參加過多少正規(guī)培訓(xùn),除了偶爾參加的網(wǎng)絡(luò)培訓(xùn)課程,我沒有上面蓋著“我可以教電腦做事情”的名牌大學(xué)畢業(yè)證。
我是學(xué)設(shè)計(jì)出身的,雖然我從大概七歲開始擺弄代碼和電腦,但是我對(duì)接受這方面的教育卻沒有同樣的熱情。我甚至不知道為什么,我熱愛電腦熱愛網(wǎng)絡(luò),卻選擇了平面設(shè)計(jì)。我不想贅述這方面的內(nèi)容,因?yàn)殡m然我有這個(gè)學(xué)位,但是它在我今天的工作中卻沒有起到太大的作用。
我相信和大多數(shù)PHP程序員一樣,我開始使用PHP是因?yàn)槲覀兿胍W(wǎng)站做更多,不僅僅是顯示一張圖片和一段文字。當(dāng)我學(xué)會(huì)了如何將數(shù)據(jù)從數(shù)據(jù)庫(kù)里提取出來顯示在網(wǎng)頁(yè)上時(shí),我萬(wàn)分激動(dòng),這太振奮人心了!這正是我想要的,所以我便一頭扎了進(jìn)去。
后來,我遇到了WordPress。就像那些坐在電腦屏幕前,懂一點(diǎn)PHP基本知識(shí)的自以為是的人改變這一切一樣,WordPress也改變著一切。WordPress的成功要?dú)w于像我這樣的人,我們這些年輕人想要一個(gè)自己的博客,卻不知道怎么自己建立。
你安裝了WordPress……然后添加了一個(gè)插件,改變了主題……然后你對(duì)主題做了一些小小的改變,所以它完成一些其他的東西,或看起來有點(diǎn)不同。然后你修改了一個(gè)插件。然后你創(chuàng)造了自己的主題。然后你在想,我還能做什么?
所以我認(rèn)識(shí)了PHP,不是我選擇了PHP,而是PHP選擇了我。20年后我還在用PHP創(chuàng)造東西,早就不用WordPress了。我想我已經(jīng)是個(gè)成熟的PHP程序員,有能力來寫這篇文章了。
“PHP太簡(jiǎn)單了,你應(yīng)該學(xué)點(diǎn)有挑戰(zhàn)性的”
PHP那么受歡迎的其中一個(gè)重要的原因就是它無處不在,哪里都裝著它。就連你最普通的MacBook中也預(yù)裝了PHP,真見鬼。
從頭寫PHP也非常容易,通常沒有什么特別的事情需要你做。創(chuàng)建一個(gè)index.php文件,在里面放一行PHP代碼,然后上傳到幾乎所有的共享主機(jī)賬戶:
- echo Hello, World! ;
然后就完成了。入門PHP真的特別簡(jiǎn)單,你不需要知道它的工作原理。你安安心心地干就完事了。然而,如果你相信的話,PHP的這種“易操性”實(shí)際上也可能是它的一種缺點(diǎn)。理論上講,如果PHP如此簡(jiǎn)單,那么用PHP編寫危險(xiǎn)的代碼也非常容易。
一想到這,我有點(diǎn)坐立難安。這是否意味著人們不太可能使用那些難的語(yǔ)言來編寫危險(xiǎn)的代碼?我在哪里讀到過,微軟為Windows發(fā)布的修補(bǔ)程序中,大約有70%是為了解決由c++引起的內(nèi)存問題(這話不是我說的)。我懷疑用c++寫微軟的人都是業(yè)余的,而且我很確定他們知道自己在做什么。
是的,雖然Windows比你用的購(gòu)物車網(wǎng)站要復(fù)雜得多,但是我認(rèn)為這個(gè)觀點(diǎn)是站得住腳的。Python是公認(rèn)的新手友好型語(yǔ)言,但是卻沒有人說它“危險(xiǎn)”。用任何語(yǔ)言寫任何危險(xiǎn)的代碼都是容易的。不是語(yǔ)言創(chuàng)造了危險(xiǎn)的代碼,而是缺乏相關(guān)的知識(shí)創(chuàng)造了危險(xiǎn)的代碼。
“簡(jiǎn)單”不是勸退新手學(xué)習(xí)PHP的理由,相反,這給了初學(xué)者們更好的工具,好讓他們?cè)趯懘a的時(shí)候做出更好的選擇。這是也是幫助他們找到合適的資源正確學(xué)習(xí)PHP的原因。我還是挺幸運(yùn)的,盡管我寫過不少“危險(xiǎn)”代碼,我的學(xué)習(xí)之路上總會(huì)有一些貴人(不一定是PHP工程師)來幫助我找出需要改進(jìn)的地方。
PHP很慢
并不。PHP 可以同步你寫代碼的速度。PHP是一種腳本語(yǔ)言,因此將其與編譯語(yǔ)言進(jìn)行比較是毫無意義的,然而出于某種原因,我看到甚至有人將PHP與Rust或Go進(jìn)行比較。這些比較沒什么意思。
把它和python或是Ruby比,可能還好一些,但是一種語(yǔ)言的“速度”是由多種因素決定的,語(yǔ)言本身,還有環(huán)境,運(yùn)行的代碼,解釋器配置方式,等等。憑空就說PHP很慢是不夠意思的。
對(duì)于某些類型的任務(wù),PHP確實(shí)很慢。例如,如果從事機(jī)器學(xué)習(xí)領(lǐng)域的工作,可能就別首選PHP (盡管有一些很有趣的項(xiàng)目正展現(xiàn)出一些前景)。
有時(shí)你會(huì)看到一些基準(zhǔn)測(cè)試,兩種語(yǔ)言做同一件事,比如循環(huán)超過100萬(wàn)條記錄,做一些簡(jiǎn)單的計(jì)算。結(jié)果往往相差幾毫秒,這常常有時(shí)候被用來證明PHP運(yùn)作慢(有時(shí)候用來證明快)。如果你編寫的軟件,在對(duì)一百萬(wàn)條記錄進(jìn)行循環(huán)時(shí),多花幾毫秒就會(huì)造成災(zāi)難性的后果,那也無話可說。
WordPress挺垃圾的
我還蠻同意這個(gè)觀點(diǎn)的。目前我不太喜歡WordPress,但是我也承認(rèn)沒有WordPress,我們很可能也不會(huì)有今天的PHP社區(qū)。然而,因?yàn)橐粋€(gè)軟件就說一種語(yǔ)言不好也有點(diǎn)草率。這就好像因?yàn)槟悴幌矚gMicrosoft Windows,就說C++是一種垃圾語(yǔ)言一樣。
PHP不是只有一種功能,WordPress也只是它的一部分。如果你想的話,有大量的框架和軟件包供你選擇。人們說Laravel是“讓PHP再次炫酷”。我必須承認(rèn),這個(gè)框架是到目前為止我最喜歡的框架之一,并且對(duì)我來說在大多數(shù)項(xiàng)目中選它都是最容易的。
因?yàn)閃ordPress是由PHP寫的,就說PHP不好有失公允。有人可能會(huì)說WordPress反映了PHP的局限性,但那是很久以前的事了,而且從那時(shí)起這門語(yǔ)言已經(jīng)成熟了很多。
PHP不適合企業(yè)使用
為什么呢?我都不知道這種言論從何而來,但這種風(fēng)真的很大。那么什么才能讓一種語(yǔ)言“適合企業(yè)”呢?Java可能是最受企業(yè)歡迎的一種語(yǔ)言之一了,但是并不是因?yàn)镴ava本身是適合企業(yè)的。是因?yàn)镴ava EE平臺(tái)的存在,我不是Java開發(fā)人員,所以有錯(cuò)歡迎糾正。
在我看來,Java是一種構(gòu)建企業(yè)應(yīng)用軟件的平臺(tái)。聽起來有點(diǎn)像一個(gè)框架,對(duì)吧?所以可能這個(gè)問題應(yīng)該是:“我最喜歡的PHP框架是不是適合企業(yè)的呢?”
要回答這個(gè)問題的話要再寫一篇文章了。我想說的點(diǎn)就是PHP和其他任何語(yǔ)言一樣,都是足夠適合企業(yè)使用的。這完全取決于你怎樣用它。
順便提一下,我曾是一個(gè)小型團(tuán)隊(duì)的一員,這個(gè)團(tuán)隊(duì)在南非一家最重要的金融機(jī)構(gòu)的內(nèi)部網(wǎng)絡(luò)上構(gòu)建并部署了一個(gè)事件管理平臺(tái)(我可能會(huì)寫一些我在這方面的經(jīng)驗(yàn))。該應(yīng)用程序完全是用PHP和JavaScript編寫的。
隨著新冠疫情的全面爆發(fā),整個(gè)系統(tǒng)承受著巨大的壓力,但它幾乎應(yīng)付了所有的壓力。我們也遇到了一些問題,但都很快解決了。
PHP不可擴(kuò)展
這可能是唯一一個(gè)有點(diǎn)理?yè)?jù)的觀點(diǎn)了,但是這比你想象的要復(fù)雜許多。事實(shí)上,如果你編寫了像樣的代碼,PHP就能很好的擴(kuò)展。當(dāng)人們說PHP不可擴(kuò)展時(shí),他們通常指的是用PHP編寫的應(yīng)用程序可能無法處理非常大量的請(qǐng)求(比如數(shù)百萬(wàn))。
問題是,這并不是那么簡(jiǎn)單的,我認(rèn)為很多對(duì)它的誤解來自于WordPress,最近WordPress因有擴(kuò)展性問題而出名。
來舉個(gè)例子,Slack是一個(gè)通訊平臺(tái),曾一度想要取email,它有幾百萬(wàn)的用戶,他們每天用的這個(gè)系統(tǒng)的后端就是用PHP寫的。如果這還不能說明PHP可擴(kuò)展,那我也無話可說了。
很多人引用Facebook作為一個(gè)很好的例子,即使我認(rèn)為Facebook在一些形式上還使用PHP,但是大部分的應(yīng)用都不用PHP了。但是說實(shí)話,F(xiàn)acebook這個(gè)例子有點(diǎn)特殊。
談?wù)摂U(kuò)展性繞不開基礎(chǔ)設(shè)施。如果你在一個(gè)簡(jiǎn)單的共享主機(jī)上托管一個(gè)WordPress博客,然后你突然得到成千上萬(wàn)的點(diǎn)擊……這可能是一個(gè)問題,你的主機(jī)會(huì)給你發(fā)一封令人討厭的郵件,或者至少會(huì)給你開出比你預(yù)想的多得多的賬單。
擴(kuò)展應(yīng)用程序涉及的不僅僅是語(yǔ)言選擇。有很多變化的部分,每當(dāng)PHP首當(dāng)其沖受到指責(zé)時(shí),我都感到難過。在適合的環(huán)境和配置下,新版本的PHP完全能夠每秒處理大量請(qǐng)求。Laravel Vapor是一個(gè)在AWS上運(yùn)行的Laravel應(yīng)用程序的第一方無服務(wù)器平臺(tái),它有一些非常令人印象深刻的數(shù)字。
我有時(shí)候覺得擴(kuò)展性這個(gè)問題有點(diǎn)夸張,我寫PHP20多年了,我從來都沒有遇到過每秒“數(shù)百萬(wàn)個(gè)請(qǐng)求”的情況。甚至類似的情況也沒有。我們絕大多數(shù)的人都沒有機(jī)會(huì)去建立下一個(gè)Facebook,無論我們有多想。
在現(xiàn)實(shí)中,我們建立的軟件有針對(duì)性多了。我們打交道的是特定國(guó)家里的特定行業(yè),所以我們不用擔(dān)心需要面臨每秒數(shù)百萬(wàn)個(gè)請(qǐng)求的情況。對(duì)于我們參與的許多項(xiàng)目來說,這是一個(gè)巨大的數(shù)字。這并不意味著我們所做的不重要,只是意味著我們不需要考慮那種規(guī)模,擴(kuò)展應(yīng)用程序以處理數(shù)百萬(wàn)個(gè)請(qǐng)求并不是我們?nèi)粘9ぷ鞯囊徊糠帧?/p>
PHP好丑
你怕不是在開玩笑吧,我把最煩人的這個(gè)觀點(diǎn)留到最后說。如果你是根據(jù)外觀來挑選技術(shù)堆棧的話,那我想說你錯(cuò)了,你真的需要去重新評(píng)估一下你的選擇方式了。
話雖這么說,我認(rèn)為PHP一點(diǎn)也不難看。有的人覺得不好看很可能是很早之前在HTML使用PHP,HTML是真的難看。問題是:現(xiàn)在沒人這么干了,再有人這么干會(huì)被嫌棄的。
我不是說那些所謂的“美麗的語(yǔ)言”是不好的選擇,但是“好看不好看”不應(yīng)該成為你的評(píng)價(jià)標(biāo)準(zhǔn)。Java非常不好看,但卻是世界上最受歡迎的語(yǔ)言之一。鼓吹因?yàn)镻HP難看而不要用PHP真的太傻了。
PHP可能不是最美麗的語(yǔ)言,但是我發(fā)現(xiàn)寫得好的話還是很有可讀性的。PHP8也有一些新的工具可以讓你的代碼看起來更“美麗”。
我愛PHP
我真的愛PHP。我愛這種編程語(yǔ)言和它的生態(tài)系統(tǒng)。我愛它在過去幾年中的完善,PHP 8不僅僅是同一種語(yǔ)言的另一種迭代。隨著每個(gè)主要版本的發(fā)布,我們得到了更好和更有用的工具。
我喜歡PHP的易上手,但我也喜歡它的復(fù)雜,要成為一名專業(yè)的PHP程序員有太多要學(xué)的東西了。我喜歡Symfony 和Laravel,我認(rèn)為開發(fā)團(tuán)隊(duì)作為PHP的核心,一直在推動(dòng)這種語(yǔ)言的進(jìn)步。
但是我最喜歡部分的還是當(dāng)一個(gè)程序員。不僅僅是寫PHP,我喜歡用任何語(yǔ)言寫。我喜歡我可以告訴電腦可以去做什么以及我教會(huì)了我自己如何去這么做。這歸功于PHP。
沒有PHP,我不知道現(xiàn)在的自己會(huì)從事什么工作。也許我會(huì)成為一個(gè)平庸的設(shè)計(jì)師,然后討厭我的工作和生活(沒有冒犯設(shè)計(jì)師朋友們的意思,我也有一些才華橫溢的設(shè)計(jì)師朋友們,他們很熱愛自己的工作)。
但是最終,我用我愛的編程語(yǔ)言從事了熱愛的工作。
本文轉(zhuǎn)載自微信公眾號(hào)「讀芯術(shù)」,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請(qǐng)聯(lián)系讀芯術(shù)公眾號(hào)。
本文標(biāo)題:PHP沒戲了?想看PHP被淘汰還早著呢!
本文來源:http://fisionsoft.com.cn/article/djhichc.html


咨詢
建站咨詢
