」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > PHP,網路上最喜歡的替罪羔羊

PHP,網路上最喜歡的替罪羔羊

發佈於2024-08-09
瀏覽:175

我不確定從什麼時候開始,但越來越多的程式設計師正在從 PHP 轉向 Go、Java 和 Python。當然,後三者之間也存在遷移,但很少看到有人轉向 PHP。這個現象引起了我的思考,我意識到 PHP 確實是完美的替罪羔羊。也許是因為它的標誌是大象,所以它天生就更能負重。

Image description

系統問題?都怪PHP

當系統持續在線上出現問題時,就是 PHP 的錯。需要驗屍的時候,要有人來承擔責任,總不能是我們自己無能吧?所以,我們把責任歸咎於 PHP。畢竟,它不會反駁。 PHP 是一種限制寬鬆的動態語言,常常會留下未被注意到的陷阱。我們肯定需要重構。

如果重構的人是最初編寫程式碼的人,那麼無論使用哪種語言,結果都可能是相同的。他們只是用新語言重寫舊程式碼,而不質疑他們最初的設計是否有缺陷。

有些人甚至以PHP 的思考方式編寫Go 或Java 程式碼:在main 方法中手動初始化一堆東西,在Go 中定義大量的map[string]interface{},或使用多執行緒存取Java 中的類屬性,而無需鎖定。

IT 成本高

當伺服器成本居高不下時,這是 PHP 效能不佳和單執行緒執行的錯。老實說,擁有大量流量的公司並不多。大多數人甚至一天都沒有獲得那麼多點擊。如果效能是一個問題,很可能是由於一堆不斷運行的緩慢查詢造成的。切換到 C 或 RUST 並不能神奇地解決這個問題。

請記住,PHP 是 Facebook 用於建立動態網站內容和伺服器端功能的最初語言。我懷疑很多公司的流量都比 Facebook 更多。

新新團隊

新領導者清理內部也很常見。很多人在網路上問為什麼公司的系統會使用三種不同的程式語言。通常的答案都是圍繞著每種語言適合不同的任務,但真正的原因往往是公司多次更換 CTO,並且每個人都引入了自己喜歡的語言。

當新的技術總監到來時,他們經常會試圖清理舊團隊。在此期間,PHP 因各種問題而受到指責,據稱阻礙了未來的業務發展和 IPO 計劃。無論開發語言如何,都會使用這種策略來證明消除異議的合理性。

當 PHP 受到指責並建議轉向另一種語言時,一些程式設計師甚至可能會歡呼。嘗試將 Java 切換到 Go,反之亦然;這是同一個故事。去年,我們的新 CTO 讓我們從 Go 轉向 Java,一些同事在匿名論壇上發洩,聲稱這是一種倒退。

事實上,如果新領導者看到 Java,他們可能會讓你轉向 Go。徹底改革技術堆疊只是清理內部的一種方法,保留合規的團隊成員,同時擺脫那些不符合新方向的人。

關鍵績效指標與促銷

即使沒有新的技術領導者,在這個 KPI 驅動、OKR 痴迷的時代,每個人都必須找到工作來證明自己的存在。你還能如何表明你的團隊正在努力工作,每天都熬夜?

PHP 成為完美的墊腳石。經理們可以向上級推銷遺留的 PHP 系統需要使用最新的高階語言進行改造,並將任務分配給可靠的人。這樣,即使不能保證晉升,高績效評等幾乎是肯定的。

總之,這些是我對為什麼 PHP 經常成為替罪羔羊的想法和個人觀點。這種分析可能不適用於真正的技術驅動型公司。人們喜歡比較程式語言,但最好的一種是適合您需求的語言。比較語言就像對運動明星進行排名一樣;它主要是主觀的,但它會產生興趣和流量,從而支持很多人。


最後推薦一個我一直在使用的PHP開發環境-ServBay。它是一款一體化開發環境管理工具,附帶多種程式語言和資料庫元件,包括 PHP、Node.js、MariaDB (MySQL) 和 PostgreSQL。 ServBay最重要的特點是支援在本地開發中使用不存在的網域(Domain)和後綴(TLD)。它甚至為這些網域創建免費的 SSL 證書,允許開發人員在加密的 HTTPS 環境中工作(例如 https://api.servbay)。這不僅增強了開發過程的安全性,而且還顯著節省了對網域名稱和 SSL 憑證的投資。

版本聲明 本文轉載於:https://dev.to/lunamiller/php-the-internets-favorite-scapegoat-2kde?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • 如何使用替換指令在GO MOD中解析模塊路徑差異?
    如何使用替換指令在GO MOD中解析模塊路徑差異?
    克服go mod中的模塊路徑差異 coreos/bbolt:github.com/coreos/ [email受保護]:解析go.mod:模塊將其路徑聲明為:go.etcd.io/bbolt `要解決此問題,您可以在go.mod文件中使用替換指令。只需在go.mod的末尾添加以下行:[&& &...
    程式設計 發佈於2025-02-07
  • 如何使用char_length()在mySQL中按字符串長度對數據進行排序?
    如何使用char_length()在mySQL中按字符串長度對數據進行排序?
    [2 using the built-in CHAR_LENGTH() function.Difference between CHAR_LENGTH() and LENGTH()CHAR_LENGTH():返回字符串中字符數的數量,考慮多字節字符編碼(例如,UTF-8)。 :可能無法準確反映多字節...
    程式設計 發佈於2025-02-07
  • 對象擬合:IE和Edge中的封面失敗,如何修復?
    對象擬合:IE和Edge中的封面失敗,如何修復?
    解決此問題,我們採用了一個巧妙的CSS解決方案來解決問題:高度:100%; 高度:auto ; 寬度:100%; //對於水平塊 ,使用絕對定位將圖像定位在中心,以object-fit:object-fit :cover in IE和edge消除了問題。現在,圖像將按比例擴展,保持所需的效果而不...
    程式設計 發佈於2025-02-07
  • 如何使用PHP將斑點(圖像)正確插入MySQL?
    如何使用PHP將斑點(圖像)正確插入MySQL?
    在嘗試將image存儲在mysql數據庫中時,您可能會遇到一個可能會遇到問題。本指南將提供成功存儲您的圖像數據的解決方案。 easudy values('$ this-> ; image_id','file_get_contents($ tmp_imag...
    程式設計 發佈於2025-02-07
  • 為什麼我會收到MySQL錯誤#1089:錯誤的前綴密鑰?
    為什麼我會收到MySQL錯誤#1089:錯誤的前綴密鑰?
    mySQL錯誤#1089:錯誤的前綴鍵錯誤descript 理解prefix keys primary鍵(movie_id(3))primary鍵(Movie_id) primary鍵(Movie_id) primary鍵(Movie_id) > `這將在整個Movie_ID列上建立標...
    程式設計 發佈於2025-02-07
  • 為什麼使用Firefox後退按鈕時JavaScript執行停止?
    為什麼使用Firefox後退按鈕時JavaScript執行停止?
    導航歷史記錄問題:JavaScript使用Firefox Back Back 此行為是由瀏覽器緩存JavaScript資源引起的。 To resolve this issue and ensure scripts execute on subsequent page visits, Firefox...
    程式設計 發佈於2025-02-07
  • 在保持其內容完整時,如何刪除DIV元素?
    在保持其內容完整時,如何刪除DIV元素?
    在保留其元素 display:cottents; display:cottents; cottents;在這種情況下是理想的選擇。它導致元素的孩子出現為父母的直接子女,無視元素本身。當使用CSS網格或其他應該忽略包裝元素的佈局技術時,這是有價值的。 。容器{ 顯示:Flex; } 。一 ...
    程式設計 發佈於2025-02-07
  • 大批
    大批
    [2 數組是對象,因此它們在JS中也具有方法。 切片(開始):在新數組中提取部分數組,而無需突變原始數組。 令arr = ['a','b','c','d','e']; // USECASE:提取直到索引作...
    程式設計 發佈於2025-02-07
  • 如何使用Python的記錄模塊實現自定義處理?
    如何使用Python的記錄模塊實現自定義處理?
    使用Python的Loggging Module 確保正確處理和登錄對於疑慮和維護的穩定性至關重要Python應用程序。儘管手動捕獲和記錄異常是一種可行的方法,但它可能乏味且容易出錯。 解決此問題,Python允許您覆蓋默認的異常處理機制,並將其重定向為登錄模塊。這提供了一種方便而係統的方法來捕獲...
    程式設計 發佈於2025-02-07
  • 如何使用組在MySQL中旋轉數據?
    如何使用組在MySQL中旋轉數據?
    在關係數據庫中使用mysql組使用mysql組來調整查詢結果。在這裡,我們面對一個共同的挑戰:使用組的組將數據從基於行的基於列的基於列的轉換。通過子句以及條件匯總函數,例如總和或情況。讓我們考慮以下查詢: select d.data_timestamp, sum(data_id = 1 tata...
    程式設計 發佈於2025-02-07
  • 我可以在CSS中使用SVG作為偽元素嗎?
    我可以在CSS中使用SVG作為偽元素嗎?
    使用svgs用作pseudo-element content css content properts允許在使用元素之前或之後使用元素插入各種類型的內容偽元素,例如::之前和::之後。但是,對可以包括哪些內容有限制。 可以將svgs用作pseudo-element Content? ,現在可以使...
    程式設計 發佈於2025-02-07
  • 如何使用FormData()處理多個文件上傳?
    如何使用FormData()處理多個文件上傳?
    )處理多個文件輸入時,通常需要處理多個文件上傳時,通常是必要的。可以將fd.append("fileToUpload[]", files[x]);方法用於此目的,允許您在單個請求中發送多個文件。 初始嘗試 在JavaScript中,一種常見方法是:); 但是,此代碼僅處理第...
    程式設計 發佈於2025-02-07
  • 如何使用不同數量列的聯合數據庫表?
    如何使用不同數量列的聯合數據庫表?
    合併列數不同的表 當嘗試合併列數不同的數據庫表時,可能會遇到挑戰。一種直接的方法是在列數較少的表中,為缺失的列追加空值。 例如,考慮兩個表,表 A 和表 B,其中表 A 的列數多於表 B。為了合併這些表,同時處理表 B 中缺失的列,請按照以下步驟操作: 確定表 B 中缺失的列,並將它們添加到表的...
    程式設計 發佈於2025-02-07
  • 如何可靠地檢查MySQL表中的列存在?
    如何可靠地檢查MySQL表中的列存在?
    在mySQL中確定列中的列存在,驗證表中的列存在與與之相比有點困惑其他數據庫系統。常用的方法:如果存在(從信息_schema.columns select * * where table_name ='prefix_topic'和column_name =&...
    程式設計 發佈於2025-02-07
  • 如何使用PHP從XML文件中有效地檢索屬性值?
    如何使用PHP從XML文件中有效地檢索屬性值?
    從php 您的目標可能是檢索“ varnum”屬性值,其中提取數據的傳統方法可能會使您感到困惑。 - > attributes()為$ attributeName => $ attributeValue){ echo $ attributeName,'=“',$ a...
    程式設計 發佈於2025-02-07

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3