現(xiàn)在做PHP還有前景嗎?
PHP和Python應(yīng)該如何選擇?
總是有人在黑php,這是怎樣的一群人?
PHP現(xiàn)在名聲不好,因?yàn)樗?jīng)是"可怕"。
這篇文章試圖回答一些關(guān)于PHP的常見論斷,以便向非技術(shù)人員說明PHP并沒有很多人說的那么差。
1.它是否鼓勵(lì)不良做法?
不再是了。以前很多開發(fā)者都是被書本教會(huì)了非常不好的做法,所以PHP代碼質(zhì)量非常差。PHP曾經(jīng)允許你做一些非常奇怪的事情,這使得構(gòu)建非常容易,但是維護(hù)起來卻是一場(chǎng)噩夢(mèng)。
這些不再是常見的問題。隨著高質(zhì)量學(xué)習(xí)資料的引入,這些資料很容易學(xué)習(xí)和獲取,一個(gè)新的開發(fā)者可以用正確的方法學(xué)習(xí)PHP。這可以防止初級(jí)開發(fā)人員編寫一些維護(hù)起來非常痛苦的代碼,因?yàn)樗麄儧]有我不知道建造東西的正確方法。
隨著框架的引入,大部分導(dǎo)致許多糟糕體驗(yàn)的常見代碼現(xiàn)在都自動(dòng)完成了;所以開發(fā)者只需要使用框架,框架就能正確編碼。
而且這些年來,一些不好的做法都是因?yàn)槿笔Я颂匦裕瑢?dǎo)致了一些不應(yīng)該被允許的事情。現(xiàn)在大多數(shù)情況下,甚至無法意識(shí)到之前寫的東西會(huì)導(dǎo)致這個(gè)名聲。
總結(jié)
它不再鼓勵(lì)不良行為...
使用框架可以避免不好的實(shí)踐。
現(xiàn)在有很多關(guān)于語言特性的討論。不再支持不好的功能。
PHP添加了其他語言中存在的大部分(如果不是全部)功能。
2.它的安全性差嗎?
過去,PHP應(yīng)用程序的安全性通常很差,因?yàn)檎Z言允許這樣做。這些東西已經(jīng)不用了,因?yàn)楝F(xiàn)在PHP應(yīng)用的開發(fā)已經(jīng)完全不同了。
通過使用自動(dòng)加載器來包含文件,而不是動(dòng)態(tài)地包含文件,遠(yuǎn)程和本地文件包含(PHP從原始地址以外的其他地址讀取文件)。
通過廣泛使用模板系統(tǒng)(可以自動(dòng)處理顯示動(dòng)態(tài)內(nèi)容的轉(zhuǎn)義和安全問題),避免了在PHP中直接使用HTML(一個(gè)用戶將Javascript腳本添加到要顯示給另一個(gè)用戶的地方)導(dǎo)致的跨站腳本攻擊。
通過在SQL中使用預(yù)處理語句,可以避免SQL注入攻擊(這是由于需要構(gòu)建SQL查詢并一起發(fā)送查詢和數(shù)據(jù),用戶可以在查詢中添加額外的SQL命令)。另外,ORM的應(yīng)用也很廣泛,它保證了用戶數(shù)據(jù)和查詢是分開發(fā)送的,SQL不能把它當(dāng)成一個(gè)單獨(dú)的命令。
通過廣泛使用和采用nonce系統(tǒng)的表單庫,避免了跨站點(diǎn)請(qǐng)求偽造(其中用戶可能被欺騙在你的網(wǎng)站上做點(diǎn)什么)。
總結(jié)
通過使用autoloader(所有主流框架的標(biāo)準(zhǔn)),避免了遠(yuǎn)程和本地文件包含。
通過使用模板語言作為標(biāo)準(zhǔn)或前端框架(如React),可以避免跨站點(diǎn)腳本(XSS)攻擊。
通過使用ORM和廣泛使用預(yù)準(zhǔn)備語句來避免SQL注入。
通過使用nonce令牌(所有主流框架都自動(dòng)支持),可以避免跨站點(diǎn)請(qǐng)求偽造(CRSF)攻擊。
3.真的很慢嗎?
那要看你拿它和什么比了。如果拿PHP和Java,C或者Go比,就慢一些。但是如果你拿PHP和Python,Ruby之類的比較,并不慢。PHP是同類語言中速度最快的語言之一,而且它還在不斷提高自己的性能。
在大多數(shù)情況下,您的應(yīng)用程序很慢是因?yàn)榉?wù)器過載或數(shù)據(jù)庫查詢很慢。這些問題在任何語言中都會(huì)存在。
總結(jié)
PHP比編譯語言慢。
PHP比其他腳本語言更快。
網(wǎng)站慢通常不是因?yàn)闆]有快速語言,而是服務(wù)器或數(shù)據(jù)庫造成的性能問題。
4.它的擴(kuò)展性真的很差嗎?
事實(shí)上,任何語言都是可以縮放的。編譯語言(如Go、C或Rust)的擴(kuò)展成本比腳本語言(如PHP)低。但是,它們不是為同一任務(wù)而設(shè)計(jì)的。其實(shí)都一樣;這僅僅取決于您使用的服務(wù)器數(shù)量。如果您使用足夠多的服務(wù)器,您可以擴(kuò)展任何應(yīng)用程序。PHP比其他腳本語言的擴(kuò)展成本更低,因?yàn)樗鼏?dòng)運(yùn)行需要的資源更少,可以運(yùn)行在CPU更多內(nèi)存更小的服務(wù)器上。
此外,對(duì)于可伸縮性,數(shù)據(jù)庫很重要。如果可以擴(kuò)展數(shù)據(jù)庫,就可以擴(kuò)展應(yīng)用程序。數(shù)據(jù)庫比應(yīng)用服務(wù)器更難擴(kuò)展。很容易添加另一個(gè)讀取數(shù)據(jù)庫的客戶機(jī);然而,使數(shù)據(jù)庫快速運(yùn)行要困難得多。
總結(jié)
任何語言都可以是可擴(kuò)展的;這取決于您使用多少臺(tái)服務(wù)器。
擴(kuò)展的真正問題是數(shù)據(jù)庫,而不是使用的應(yīng)用程序語言。
如果你能擴(kuò)展你的數(shù)據(jù),你就能擴(kuò)展你的應(yīng)用。
5.我應(yīng)該一直用它嗎?
不是。每種編程語言都有自己的專業(yè)領(lǐng)域。PHP非常適合Web應(yīng)用。你應(yīng)該用它來構(gòu)建網(wǎng)站和API。
如果您正在構(gòu)建一個(gè)系統(tǒng)應(yīng)用程序,其中每一毫秒都很重要,請(qǐng)使用Rust或c。
如果你正在構(gòu)建一個(gè)人工智能應(yīng)用,Python是一個(gè)很好的選擇。
如果您正在構(gòu)建一個(gè)SaaS應(yīng)用程序,PHP是一個(gè)不錯(cuò)的選擇。
如果你正在建造Kotlin是構(gòu)建Android應(yīng)用程序的一個(gè)好選擇。
如果您正在構(gòu)建一個(gè)運(yùn)行在多個(gè)平臺(tái)上的應(yīng)用程序,Java是一個(gè)不錯(cuò)的選擇。
總結(jié)
每種語言都有其最佳用例。
PHP的最佳用例是Web應(yīng)用程序。
Go,Rust,c適合系統(tǒng)應(yīng)用。
Python適合人工智能。
Kotlin適用于Android應(yīng)用程序。
Java適合于平臺(tái)無關(guān)的應(yīng)用程序。
6.結(jié)論
每年都講php,但是你的PHP現(xiàn)在是不是過期了?很多關(guān)于PHP的說法已經(jīng)過時(shí)10年了。在我看來,如果有人給你一個(gè)過期10年的技術(shù)主題的信息,那么這個(gè)人可能不是你想要信任的技術(shù)專家。
PHP是創(chuàng)建Web應(yīng)用程序的一種很好的編程語言,我認(rèn)為它是開發(fā)Web應(yīng)用程序的最佳語言。