現(xiàn)在的 PHP 沒(méi)你想的那么差
PHP 現(xiàn)在名聲很糟糕,但 PHP 并不像許多人所說(shuō)的那么糟糕。
它是不是鼓勵(lì)糟糕的實(shí)踐?
不再是了。過(guò)去,許多開(kāi)發(fā)者被書(shū)本教授非常糟糕的實(shí)踐,因此 PHP 代碼的質(zhì)量非常差。PHP 曾經(jīng)還允許你做一些非常奇怪的事情,使得它非常容易構(gòu)建,但維護(hù)起來(lái)卻是一場(chǎng)噩夢(mèng)。
這些不再是常見(jiàn)的問(wèn)題。隨著高質(zhì)量學(xué)習(xí)材料的引入,這些材料易學(xué)且易獲取,一名新的開(kāi)發(fā)人員可以以正確的方式學(xué)習(xí) PHP。這樣就可以避免初級(jí)開(kāi)發(fā)者因?yàn)椴恢罉?gòu)建事物的正確方法而編寫(xiě)一些維護(hù)起來(lái)非常痛苦的代碼。
隨著框架的引入,導(dǎo)致許多糟糕體驗(yàn)的大部分通用代碼現(xiàn)在都自動(dòng)完成了;因此,開(kāi)發(fā)人員只需使用框架,框架就可以正確地對(duì)其進(jìn)行編碼。來(lái)源公眾號(hào):碼農(nóng)編程進(jìn)階筆記
而且,這些年來(lái),一些糟糕的實(shí)踐是由缺失的特性造成的,導(dǎo)致了一些本不應(yīng)該被允許的事情被允許?,F(xiàn)在大多數(shù)情況下,甚至不可能實(shí)現(xiàn)以前編寫(xiě)的一些東西來(lái)導(dǎo)致這種聲譽(yù)。
它的安全性是不是很差?
過(guò)去,PHP 應(yīng)用程序的安全性通常很差,因?yàn)檎Z(yǔ)言允許這樣做。這些東西不再被使用,因?yàn)?PHP 應(yīng)用程序的開(kāi)發(fā)現(xiàn)在已經(jīng)完全不同。
通過(guò)使用自動(dòng)加載程序來(lái)包含文件而不是動(dòng)態(tài)包含文件,已經(jīng)移除了遠(yuǎn)程和本地文件包含(其中 PHP 從其它地址而不是最初打算的地址讀取文件)。
通過(guò)廣泛使用模板系統(tǒng)(可以自動(dòng)處理顯示動(dòng)態(tài)內(nèi)容的轉(zhuǎn)義和安全問(wèn)題),已經(jīng)避免了由于直接在 PHP 中直接使用 HTML 所導(dǎo)致的跨站腳本攻擊(其中一個(gè)用戶將 JavaScript 腳本添加到要顯示給另一個(gè)用戶的地方)。
通過(guò)在 SQL 中使用 prepared 語(yǔ)句,避免了 SQL 注入攻擊(這是由于需要構(gòu)建 SQL 查詢并將查詢和數(shù)據(jù)一起發(fā)送導(dǎo)致的,其中用戶可以向查詢中增加額外的 SQL 命令)。另外,ORM 的使用也很普遍,它確保用戶數(shù)據(jù)和查詢是分開(kāi)發(fā)送的,而 SQL 不能將其視為單獨(dú)的命令。
通過(guò)廣泛使用且采用 nonce 系統(tǒng)的 form 庫(kù),避免了跨站請(qǐng)求偽造(其中,用戶能夠被誘騙在你的站點(diǎn)上執(zhí)行某些操作)。
它是不是真的很慢?
這取決于你把它與什么比較。如果你把 PHP 與 Java、C 或者 Go 比較,那么它是比較慢。但是如果你把 PHP 與 Python、Ruby 等等比較,那么它并不慢。在同類(lèi)型的語(yǔ)言中,PHP 是最快的之一,并且不斷在提高性能。
大多數(shù)情況下,你的應(yīng)用程序慢是因?yàn)榉?wù)器過(guò)載或者數(shù)據(jù)庫(kù)查詢慢。這些問(wèn)題在任何語(yǔ)言中都會(huì)存在。
它的伸縮性是不是真的很差?
實(shí)際上,任何語(yǔ)言都可以伸縮。編譯型語(yǔ)言(例如 Go、C 或 Rust)比腳本型語(yǔ)言(例如 PHP)的擴(kuò)展成本更低。然而,它們并不是為了同樣的任務(wù)而設(shè)計(jì)的。事實(shí)上,它們都是一樣的;這簡(jiǎn)單地歸結(jié)于你使用的服務(wù)器數(shù)量。如果你使用足夠多的服務(wù)器,你可以擴(kuò)展任何應(yīng)用程序。PHP 比其它腳本型語(yǔ)言的擴(kuò)展成本更低,因?yàn)樗枰俚馁Y源來(lái)開(kāi)始運(yùn)行,并且可以在具有更多 CPU 的較小內(nèi)存的服務(wù)器上運(yùn)行。來(lái)源公眾號(hào):碼農(nóng)編程進(jìn)階筆記
另外,對(duì)于伸縮性,重要的是數(shù)據(jù)庫(kù)。如果你能夠擴(kuò)展你的數(shù)據(jù)庫(kù),你就可以擴(kuò)展你的應(yīng)用程序。數(shù)據(jù)庫(kù)比應(yīng)用服務(wù)器更難擴(kuò)展。增加另一個(gè)讀取數(shù)據(jù)庫(kù)的客戶端很容易;但是,讓數(shù)據(jù)庫(kù)快速運(yùn)行要難得多。
我應(yīng)該一直使用它嗎?
不。每種編程語(yǔ)言都有其擅長(zhǎng)的領(lǐng)域。PHP 非常適合 Web 應(yīng)用程序。你應(yīng)該用它來(lái)構(gòu)建網(wǎng)站和 API。
如果你正在構(gòu)建一個(gè)系統(tǒng)應(yīng)用程序,其中每毫秒都很重要,使用 Rust 或者 C。
如果你正在構(gòu)建一個(gè)人工智能應(yīng)用程序,Python 是一個(gè)好選項(xiàng)。
如果你正在構(gòu)建一個(gè) SaaS 應(yīng)用程序,PHP 是一個(gè)好選項(xiàng)。
如果你正在構(gòu)建一個(gè)安卓應(yīng)用程序,Kotlin 是一個(gè)好選項(xiàng)。
如果你正在構(gòu)建一個(gè)運(yùn)行在多個(gè)平臺(tái)上的應(yīng)用程序,Java 是一個(gè)好選項(xiàng)。、
PHP 還有未來(lái)么,還是 28 歲就“壽終正寢”了?
2023年P(guān)HP/Go面試題集總結(jié)【建議收藏】
結(jié) 論
很多關(guān)于 PHP 的說(shuō)法都已經(jīng)過(guò)時(shí) 10 年了。在我們看來(lái),如果有人給你關(guān)于某個(gè)技術(shù)主題的過(guò)期 10 年的信息,那么這個(gè)人可能不是你想要信任的技術(shù)專(zhuān)家。作為多年 PHP 的開(kāi)發(fā)者,在使用了 Go 語(yǔ)言之后......
PHP 是創(chuàng)建 Web 應(yīng)用程序的一門(mén)好編程語(yǔ)言,我們認(rèn)為它是 Web 應(yīng)用程序開(kāi)發(fā)的最佳語(yǔ)言。
作者:碼農(nóng)編程進(jìn)階筆記
歡迎關(guān)注微信公眾號(hào) :碼農(nóng)編程進(jìn)階筆記