PHP沒你想的那麼糟糕

{"type":"doc","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"link","attrs":{"href":"https:\/\/mp.weixin.qq.com\/s?__biz=MzIzNjUxMzk2NQ==&mid=2247511302&idx=1&sn=e5d718e2a89a61e78fa7ffa7b468bce9&chksm=e8d452c4dfa3dbd28cef82de9adf6f3081334e971ed2a01c325f86d2e99d6d7e9344916fd7fc&scene=27#wechat_redirect","title":"xxx","type":null},"content":[{"type":"text","text":"PHP"}]},{"type":"text","text":"現在名聲很糟糕,因爲它曾經是“可怕”的。本文試着回答一些常見的關於PHP的斷言,目的是向非技術人員解釋,PHP並不像許多人所說的那麼糟糕。"}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"它是不是鼓勵糟糕的實踐?"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"不再是了。過去,許多開發者被書本教授非常糟糕的實踐,因此PHP代碼的質量非常差。PHP曾經還允許你做一些非常奇怪的事情,使得它非常容易構建,但維護起來卻是一場噩夢。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"這些不再是常見的問題。隨着高質量學習材料的引入,這些材料易學且易獲取,一名新的開發人員可以以正確的方式學習PHP。這樣就可以避免初級開發者因爲不知道構建事物的正確方法而編寫一些維護起來非常痛苦的代碼。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"隨着框架的引入,導致許多糟糕體驗的大部分通用代碼現在都自動完成了;因此,開發人員只需使用框架,框架就可以正確地對其進行編碼。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"而且,這些年來,一些糟糕的實踐是由缺失的特性造成的,導致了一些本不應該被允許的事情被允許。現在大多數情況下,甚至不可能實現以前編寫的一些東西來導致這種聲譽。"}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"小結"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"它不再鼓勵糟糕的實踐..."}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"通過使用框架避免了糟糕實踐。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"語言特性現在有很多討論。糟糕的特性不再受到支持。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"PHP添加了其他語言中存在的大部分(即使不是全部)的特性。"}]}]}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"它的安全性是不是很差?"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"過去,"},{"type":"link","attrs":{"href":"https:\/\/www.infoq.cn\/article\/5vXtdwcwWT7zbtQ9QDkV","title":"xxx","type":null},"content":[{"type":"text","text":"PHP"}]},{"type":"text","text":"應用程序的安全性通常很差,因爲語言允許這樣做。這些東西不再被使用,因爲PHP應用程序的開發現在已經完全不同。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"通過使用自動加載程序來包含文件而不是動態包含文件,已經移除了遠程和本地文件包含(其中PHP從其它地址而不是最初打算的地址讀取文件)。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"通過廣泛使用模板系統(可以自動處理顯示動態內容的轉義和安全問題),已經避免了由於直接在PHP中直接使用HTML所導致的跨站腳本攻擊(其中一個用戶將JavaScript腳本添加到要顯示給另一個用戶的地方)。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"通過在SQL中使用prepared語句,避免了SQL注入攻擊(這是由於需要構建SQL查詢並將查詢和數據一起發送導致的,其中用戶可以向查詢中增加額外的SQL命令)。另外,ORM的使用也很普遍,它確保用戶數據和查詢是分開發送的,而SQL不能將其視爲單獨的命令。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"通過廣泛使用且採用nonce系統的form庫,避免了跨站請求僞造(其中,用戶能夠被誘騙在你的站點上執行某些操作)。"}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"小結"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"不再是了。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"通過使用自動加載程序(所有主流框架的標配),避免了遠程和本地文件包含。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"通過使用模板語言作爲標準或一種前端框架(例如React),避免了跨站腳本(XSS)攻擊。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"通過使用ORMs和廣泛使用prepared語句,避免了SQL注入。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"通過使用nonce token(被所有"},{"type":"text","marks":[{"type":"strong"},{"type":"strong"},{"type":"strong"}],"text":"主流"},{"type":"text","marks":[{"type":"strong"}],"text":"框架自動支持),避免了跨站請求僞造(CRSF)攻擊。"}]}]}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"它是不是真的很慢?"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"這取決於你把它與什麼比較。如果你把PHP與Java、C或者Go比較,那麼它是比較慢。但是如果你把PHP與Python、Ruby等等比較,那麼它並不慢。在同類型的語言中,PHP是最快的之一,並且不斷在提高性能。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"大多數情況下,你的應用程序慢是因爲服務器過載或者數據庫查詢慢。這些問題在任何語言中都會存在。"}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"小結"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"PHP與編譯型語言相比是比較慢。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"PHP與其它腳本型語言相比是比較快的。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"網站慢通常不是由於使用的語言不夠快,而是因爲服務器或數據庫導致的"},{"type":"text","marks":[{"type":"strong"},{"type":"strong"},{"type":"strong"}],"text":"性能"},{"type":"text","marks":[{"type":"strong"}],"text":"問題。"}]}]}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"它的伸縮性是不是真的很差?"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"實際上,任何語言都可以伸縮。編譯型語言(例如Go、C或Rust)比腳本型語言(例如PHP)的擴展成本更低。然而,它們並不是爲了同樣的任務而設計的。事實上,它們都是一樣的;這簡單地歸結於你使用的服務器數量。如果你使用足夠多的服務器,你可以擴展任何應用程序。PHP比其它腳本型語言的擴展成本更低,因爲它需要更少的資源來開始運行,並且可以在具有更多CPU的較小內存的服務器上運行。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"另外,對於伸縮性,重要的是數據庫。如果你能夠擴展你的數據庫,你就可以擴展你的應用程序。數據庫比應用服務器更難擴展。增加另一個讀取數據庫的客戶端很容易;但是,讓數據庫快速運行要難得多。"}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"小結"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"任何語言都可以伸縮;這取決於你使用多少服務器。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"擴展的真正問題是數據庫而不是所使用的應用程序語言。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"如果你能夠擴展你的數據,你就能"},{"type":"text","marks":[{"type":"strong"},{"type":"strong"},{"type":"strong"}],"text":"擴展"},{"type":"text","marks":[{"type":"strong"}],"text":"你的應用程序。"}]}]}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"我應該一直使用它嗎?"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"不。每種編程語言都有其擅長的領域。PHP非常適合Web應用程序。你應該用它來構建網站和API。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"如果你正在構建一個系統應用程序,其中每毫秒都很重要,使用Rust或者C。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"如果你正在構建一個人工智能應用程序,Python是一個好選項。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"如果你正在構建一個SaaS應用程序,PHP是一個好選項。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"如果你正在構建一個安卓應用程序,Kotlin是一個好選項。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"如果你正在構建一個運行在多個平臺上的應用程序,Java是一個好選項。"}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"小結"}]},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"不,每種語言都有其最佳用例。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"PHP的最佳用例是Web應用程序。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"Go、Rust、C適合系統應用程序。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"Python適合人工智能。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"Kotlin適合安卓應用程序。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"Java適合與平臺無關的應用程序。"}]}]}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"結論"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"很多關於PHP的說法都已經過時10年了。在我們看來,如果有人給你關於某個技術主題的過期10年的信息,那麼這個人可能不是你想要信任的技術專家。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"PHP是創建Web應用程序的一門好編程語言,我們認爲它是Web應用程序開發的最佳語言。"}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"小結"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"這些抱怨中"},{"type":"text","marks":[{"type":"strong"},{"type":"strong"},{"type":"strong"}],"text":"很多"},{"type":"text","marks":[{"type":"strong"}],"text":"都過期"},{"type":"text","marks":[{"type":"strong"},{"type":"strong"},{"type":"strong"}],"text":"1"},{"type":"text","marks":[{"type":"strong"}],"text":"0年了。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"我們認爲PHP是構建Web應用程序的最佳語言。"}]}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"原文鏈接:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"link","attrs":{"href":"https:\/\/www.getparthenon.com\/blog\/php-isnt-that-like-really-bad\/","title":"","type":null},"content":[{"type":"text","text":"https:\/\/www.getparthenon.com\/blog\/php-isnt-that-like-really-bad\/"}]}]}]}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章