PHP 現在名聲很糟糕,因為它曾經是“可怕”的。
本文試著回答一些常見的關於 PHP 的斷言,目的是向非技術人員解釋,PHP 並不像許多人所說的那麼糟糕。
1、它是不是鼓勵糟糕的實踐?
不再是了。過去,許多開發者被書本教授非常糟糕的實踐,因此 PHP 程式碼的質量非常差。PHP 曾經還允許你做一些非常奇怪的事情,使得它非常容易構建,但維護起來卻是一場噩夢。
這些不再是常見的問題。隨著高質量學習材料的引入,這些材料易學且易獲取,一名新的開發人員可以以正確的方式學習 PHP。這樣就可以避免初級開發者因為不知道構建事物的正確方法而編寫一些維護起來非常痛苦的程式碼。
隨著框架的引入,導致許多糟糕體驗的大部分通用程式碼現在都自動完成了;因此,開發人員只需使用框架,框架就可以正確地對其進行編碼。
而且,這些年來,一些糟糕的實踐是由缺失的特性造成的,導致了一些本不應該被允許的事情被允許。現在大多數情況下,甚至不可能實現以前編寫的一些東西來導致這種聲譽。
小結它不再鼓勵糟糕的實踐…
透過使用框架避免了糟糕實踐。
PHP 添加了其他語言中存在的大部分(即使不是全部)的特性。
2、它的安全性是不是很差?
過去,PHP 應用程式的安全性通常很差,因為語言允許這樣做。這些東西不再被使用,因為 PHP 應用程式的開發現在已經完全不同。
透過使用自動載入程式來包含檔案而不是動態包含檔案,已經移除了遠端和本地檔案包含(其中 PHP 從其它地址而不是最初打算的地址讀取檔案)。
透過廣泛使用模板系統(可以自動處理顯示動態內容的轉義和安全問題),已經避免了由於直接在 PHP 中直接使用 HTML 所導致的跨站指令碼攻擊(其中一個使用者將 JavaScript 指令碼新增到要顯示給另一個使用者的地方)。
透過在 SQL 中使用 prepared 語句,避免了 SQL 注入攻擊(這是由於需要構建 SQL 查詢並將查詢和資料一起傳送導致的,其中使用者可以向查詢中增加額外的 SQL 命令)。另外,ORM 的使用也很普遍,它確保使用者資料和查詢是分開發送的,而 SQL 不能將其視為單獨的命令。
透過廣泛使用且採用 nonce 系統的 form 庫,避免了跨站請求偽造(其中,使用者能夠被誘騙在你的站點上執行某些操作)。
小結透過使用自動載入程式(所有主流框架的標配),避免了遠端和本地檔案包含。
透過使用模板語言作為標準或一種前端框架(例如 React),避免了跨站指令碼(XSS)攻擊。
透過使用 ORMs 和廣泛使用 prepared 語句,避免了 SQL 注入。
透過使用 nonce token(被所有主流框架自動支援),避免了跨站請求偽造(CRSF)攻擊。
3、它是不是真的很慢?
這取決於你把它與什麼比較。如果你把 PHP 與 Java、C 或者 Go 比較,那麼它是比較慢。但是如果你把 PHP 與 Python、Ruby 等等比較,那麼它並不慢。在同類型的語言中,PHP 是最快的之一,並且不斷在提高效能。
大多數情況下,你的應用程式慢是因為伺服器過載或者資料庫查詢慢。這些問題在任何語言中都會存在。
小結PHP 與編譯型語言相比是比較慢。
PHP 與其它指令碼型語言相比是比較快的。
網站慢通常不是由於使用的語言不夠快,而是因為伺服器或資料庫導致的效能問題。
4、它的伸縮性是不是真的很差?
實際上,任何語言都可以伸縮。編譯型語言(例如 Go、C 或 Rust)比指令碼型語言(例如 PHP)的擴充套件成本更低。然而,它們並不是為了同樣的任務而設計的。事實上,它們都是一樣的;這簡單地歸結於你使用的伺服器數量。如果你使用足夠多的伺服器,你可以擴充套件任何應用程式。PHP 比其它指令碼型語言的擴充套件成本更低,因為它需要更少的資源來開始執行,並且可以在具有更多 CPU 的較小記憶體的伺服器上執行。
另外,對於伸縮性,重要的是資料庫。如果你能夠擴充套件你的資料庫,你就可以擴充套件你的應用程式。資料庫比應用伺服器更難擴充套件。增加另一個讀取資料庫的客戶端很容易;但是,讓資料庫快速執行要難得多。
小結任何語言都可以伸縮;這取決於你使用多少伺服器。
擴充套件的真正問題是資料庫而不是所使用的應用程式語言。
如果你能夠擴充套件你的資料,你就能擴充套件你的應用程式。
5、我應該一直使用它嗎?
不。每種程式語言都有其擅長的領域。PHP 非常適合 Web 應用程式。你應該用它來構建網站和 API。
如果你正在構建一個系統應用程式,其中每毫秒都很重要,使用 Rust 或者 C。
如果你正在構建一個人工智慧應用程式,Python 是一個好選項。
如果你正在構建一個 SaaS 應用程式,PHP 是一個好選項。
如果你正在構建一個安卓應用程式,Kotlin 是一個好選項。
如果你正在構建一個執行在多個平臺上的應用程式,Java 是一個好選項。
小結每種語言都有其最佳用例。
PHP 的最佳用例是 Web 應用程式。
Go、Rust、C 適合系統應用程式。
Python 適合人工智慧。
Kotlin 適合安卓應用程式。
Java 適合與平臺無關的應用程式。
6、結論
每年都有在吐槽php,可是你這個phper現在過期了嗎?很多關於 PHP 的說法都已經過時 10 年了。在我看來,如果有人給你關於某個技術主題的過期 10 年的資訊,那麼這個人可能不是你想要信任的技術專家。
PHP 是建立 Web 應用程式的一門好程式語言,我認為它是實現 Web 應用程式開發的最佳語言。
PHP 現在名聲很糟糕,因為它曾經是“可怕”的。
本文試著回答一些常見的關於 PHP 的斷言,目的是向非技術人員解釋,PHP 並不像許多人所說的那麼糟糕。
1、它是不是鼓勵糟糕的實踐?
不再是了。過去,許多開發者被書本教授非常糟糕的實踐,因此 PHP 程式碼的質量非常差。PHP 曾經還允許你做一些非常奇怪的事情,使得它非常容易構建,但維護起來卻是一場噩夢。
這些不再是常見的問題。隨著高質量學習材料的引入,這些材料易學且易獲取,一名新的開發人員可以以正確的方式學習 PHP。這樣就可以避免初級開發者因為不知道構建事物的正確方法而編寫一些維護起來非常痛苦的程式碼。
隨著框架的引入,導致許多糟糕體驗的大部分通用程式碼現在都自動完成了;因此,開發人員只需使用框架,框架就可以正確地對其進行編碼。
而且,這些年來,一些糟糕的實踐是由缺失的特性造成的,導致了一些本不應該被允許的事情被允許。現在大多數情況下,甚至不可能實現以前編寫的一些東西來導致這種聲譽。
小結它不再鼓勵糟糕的實踐…
透過使用框架避免了糟糕實踐。
PHP 添加了其他語言中存在的大部分(即使不是全部)的特性。
2、它的安全性是不是很差?
過去,PHP 應用程式的安全性通常很差,因為語言允許這樣做。這些東西不再被使用,因為 PHP 應用程式的開發現在已經完全不同。
透過使用自動載入程式來包含檔案而不是動態包含檔案,已經移除了遠端和本地檔案包含(其中 PHP 從其它地址而不是最初打算的地址讀取檔案)。
透過廣泛使用模板系統(可以自動處理顯示動態內容的轉義和安全問題),已經避免了由於直接在 PHP 中直接使用 HTML 所導致的跨站指令碼攻擊(其中一個使用者將 JavaScript 指令碼新增到要顯示給另一個使用者的地方)。
透過在 SQL 中使用 prepared 語句,避免了 SQL 注入攻擊(這是由於需要構建 SQL 查詢並將查詢和資料一起傳送導致的,其中使用者可以向查詢中增加額外的 SQL 命令)。另外,ORM 的使用也很普遍,它確保使用者資料和查詢是分開發送的,而 SQL 不能將其視為單獨的命令。
透過廣泛使用且採用 nonce 系統的 form 庫,避免了跨站請求偽造(其中,使用者能夠被誘騙在你的站點上執行某些操作)。
小結透過使用自動載入程式(所有主流框架的標配),避免了遠端和本地檔案包含。
透過使用模板語言作為標準或一種前端框架(例如 React),避免了跨站指令碼(XSS)攻擊。
透過使用 ORMs 和廣泛使用 prepared 語句,避免了 SQL 注入。
透過使用 nonce token(被所有主流框架自動支援),避免了跨站請求偽造(CRSF)攻擊。
3、它是不是真的很慢?
這取決於你把它與什麼比較。如果你把 PHP 與 Java、C 或者 Go 比較,那麼它是比較慢。但是如果你把 PHP 與 Python、Ruby 等等比較,那麼它並不慢。在同類型的語言中,PHP 是最快的之一,並且不斷在提高效能。
大多數情況下,你的應用程式慢是因為伺服器過載或者資料庫查詢慢。這些問題在任何語言中都會存在。
小結PHP 與編譯型語言相比是比較慢。
PHP 與其它指令碼型語言相比是比較快的。
網站慢通常不是由於使用的語言不夠快,而是因為伺服器或資料庫導致的效能問題。
4、它的伸縮性是不是真的很差?
實際上,任何語言都可以伸縮。編譯型語言(例如 Go、C 或 Rust)比指令碼型語言(例如 PHP)的擴充套件成本更低。然而,它們並不是為了同樣的任務而設計的。事實上,它們都是一樣的;這簡單地歸結於你使用的伺服器數量。如果你使用足夠多的伺服器,你可以擴充套件任何應用程式。PHP 比其它指令碼型語言的擴充套件成本更低,因為它需要更少的資源來開始執行,並且可以在具有更多 CPU 的較小記憶體的伺服器上執行。
另外,對於伸縮性,重要的是資料庫。如果你能夠擴充套件你的資料庫,你就可以擴充套件你的應用程式。資料庫比應用伺服器更難擴充套件。增加另一個讀取資料庫的客戶端很容易;但是,讓資料庫快速執行要難得多。
小結任何語言都可以伸縮;這取決於你使用多少伺服器。
擴充套件的真正問題是資料庫而不是所使用的應用程式語言。
如果你能夠擴充套件你的資料,你就能擴充套件你的應用程式。
5、我應該一直使用它嗎?
不。每種程式語言都有其擅長的領域。PHP 非常適合 Web 應用程式。你應該用它來構建網站和 API。
如果你正在構建一個系統應用程式,其中每毫秒都很重要,使用 Rust 或者 C。
如果你正在構建一個人工智慧應用程式,Python 是一個好選項。
如果你正在構建一個 SaaS 應用程式,PHP 是一個好選項。
如果你正在構建一個安卓應用程式,Kotlin 是一個好選項。
如果你正在構建一個執行在多個平臺上的應用程式,Java 是一個好選項。
小結每種語言都有其最佳用例。
PHP 的最佳用例是 Web 應用程式。
Go、Rust、C 適合系統應用程式。
Python 適合人工智慧。
Kotlin 適合安卓應用程式。
Java 適合與平臺無關的應用程式。
6、結論
每年都有在吐槽php,可是你這個phper現在過期了嗎?很多關於 PHP 的說法都已經過時 10 年了。在我看來,如果有人給你關於某個技術主題的過期 10 年的資訊,那麼這個人可能不是你想要信任的技術專家。
PHP 是建立 Web 應用程式的一門好程式語言,我認為它是實現 Web 應用程式開發的最佳語言。