PHP系列 - 1: 簡介

PHP系列 - 1: 簡介

更新於 發佈於 閱讀時間約 8 分鐘

這個 PHP 系列將介紹我在工作中獲得的一些 PHP 相關小知識、曾經不小心踩過的雷,以及常見的誤解和錯誤概念,例如魔術方法、回呼函數(callback)、Composer 等。在這第一單元中,我們不會討論 PHP 的來源或歷史這些古板的內容,而是直接開始介紹一些實用的工具吧!

PHP 分析器 xhprof

在產品的線上環境中,由於用量大、流量高,往往無法像在本地一樣進行測試和比較。不過,有些情境卻必須在線上環境才能重現,這時候就可以使用 xhprof 這個 PHP 分析器。它相對於其他工具消耗的 CPU 資源較少,但仍能提供重要的性能數據,幫助我們在鎖定問題時有更清晰的方向。

不過,唯一的缺點是,這個工具目前僅支援 PHP 7.4 版本以前的版本,後續版本將不再提供支持。

簡單測試 PHP Sandbox

有時候,我們只是想快速測試一些東西,但又不想在目前的專案中騰出空間去做這件事情(例如切換分頁或更改 PHP 版本),這時候就可以使用 PHP 沙盒 這個網站。除了可以直接執行 PHP 程式碼外,還能選擇各個主版本以及子版本的 PHP,測試起來非常方便!

格式檢查 PHP_CodeSniffer

在編寫程式時,我們常常會進入心流狀態,程式碼如湧泉般源源不斷流出。當回過神來後,往往會發現雖然邏輯正確,但格式卻一團亂。這時候,PHP_CodeSniffer 就成了我們的好幫手!

下載這個套件後,只需執行一個指令,它就會檢查程式碼中的格式問題,並指出具體的錯誤所在。更棒的是,PHP_CodeSniffer 還能直接幫你修正格式問題,讓你的程式碼更整潔、更具可讀性!

PHPDoc 註解

由於 PHP 是弱型別語言,為了保持團隊的運作效率,通常會要求開發者撰寫註解,以便後續的同事能夠理解程式碼。其中一種常見的方式就是使用 PHPDoc。PHPDoc 是一種廣泛使用的非正式標準,提供了多種標記,例如 @param@return@throws 等,以方便描述函數的參數、返回值及可能拋出的異常。

此外,PHPStan 內建的功能可以自動生成 PHPDoc 註解,進一步提高了編碼的效率與可讀性。

靜態分析 PHPStan

PHPStan 是一個用於靜態分析 PHP 程式碼的工具,可以透過調整規則等級決定檢測的層級[註1]。此外,它還支援使用正則表達式來忽略特定的錯誤。常見的報錯包括呼叫函數時的參數型別錯誤、註解錯誤(例如調整了參數卻未更新相應的註解)、以及無效的判斷式[註2]等。

範例設置檔:

parameters:
level: 2
paths:
- app
universalObjectCratesClasses:
- Illuminate\\Support\\HigherOrderCollectionProxy
ignoreErrors:
- '#Call to an undefined static method Illuminate\\\\Support\\\\Str::(mb_trim)\\(\\)#'
- '#Call to an undefined static method Illuminate\\\\Validation\\\\Rule::(mimetypes)\\(\\)#'
- '#Call to an undefined static method Corp104\\\\Vip\\\\Redis\\\\Facades\\\\RedisCache::(get|put|del|setex)\\(\\)#'
- '#Call to an undefined method Illuminate\\\\Http\\\\Request::(additionalInformation|csrInformation|createServerRequest)\\(\\)#'
- '#Call to an undefined method Illuminate\\\\Http\\\\UploadedFile::(overwrite|read)\\(\\)#'
- '#Call to an undefined method Illuminate\\\\Redis\\\\Connections\\\\Connection::(get|put|del|setex)\\(\\)#'
- '#Call to an undefined method Illuminate\\\\Support\\\\HigherOrderCollectionProxy::(\\w+)\\(\\)#'
- '#Call to an undefined method Illuminate\\\\Database\\\\Eloquent\\\\Relations\\\\HasOne::(\\w+)\\(\\)#'
- '#Call to an undefined method Illuminate\\\\Database\\\\Eloquent\\\\Relations\\\\HasMany::(\\w+)\\(\\)#'

[註1] 主要是為了避免檢測層級設置過高時,產生大量誤報,而這些誤報多來自 Laravel 提供的魔術方法。

[註2] 例如,判斷式 empty(collect()) 必定會返回 false。


參考資料:

  1. https://www.php.net/manual/zh/intro.xhprof.php
  2. https://learnku.com/laravel/t/3142/php-performance-tracking-and-analysis-tool-xhprof-installation-and-use
  3. https://onlinephp.io/
  4. https://github.com/squizlabs/PHP_CodeSniffer
  5. https://old-oomusou.goodjack.tw/phpstorm/phpstorm-phpdoc/
  6. https://docs.laravel-dojo.com/php-the-right-way/gh-pages/phpdoc
  7. https://phpstan.org/
  8. https://phpstan.org/user-guide/rule-levels
  9. https://phpstan.org/user-guide/baseline
avatar-img
林柏宇的沙龍
2會員
40內容數
test
留言
avatar-img
留言分享你的想法!
林柏宇的沙龍 的其他內容
在軟體開發中,客戶經常會遇到無法訪問公司網頁的問題,但這類問題常常難以從日誌中查找解決方案。本文探討了有效的解決方式,特別是利用HTTP Archive(HAR)檔案來分析問題根本,幫助客戶瞭解問題的來源,包括使用有用的工具來進行資訊解析。透過案例與經驗分享,讓讀者能更有效地應對類似挑戰。
在這篇文章中,我們將探討常見的下載中斷問題,尤其針對高畫質影片或大檔案的傳輸困難。通過問題描述與解析,我們發現影響下載成功的因素,並提出利用 byte-range 技術進行分段傳輸的解決方案。此外,也會說明調整 header 的重要性,幫助開發者有效改善用戶下載體驗。
在軟體工程中,文件管理常被忽視,但對於多方協作至關重要。本文深入探討API文件、YAML格式和UML圖的應用,強調保持文件的版本控制,使用Swagger和Markdown工具提升可讀性與協作效率。此外,我們將討論如何利用PlantUML輕鬆繪製UML圖,以促進開發團隊之間的有效溝通與理解。
本文介紹了代理伺服器的重要性及其主要功能,包括請求轉發、響應回傳、隱私保護、內容過濾等。此外,本文還探討了各類型的代理伺服器,如正向代理、反向代理、透明代理和高匿名代理,以及它們在網路架構中的角色。瞭解這些概念不僅能增進對網路安全的認識,還能在選擇合適的解決方案時提供幫助。
在資料分析中,資料處理和可視化是不可或缺的兩項重要任務。本文介紹了 ELK 系統(包括 Elasticsearch、Logstash 和 Kibana)以及 Grafana 的核心功能及其在日誌管理和資料分析中的作用,幫助讀者理解這些工具如何提升資料處理效率和可視化效果,從而更好地應用於真實場景中。
在系統架構領域,高併發、高可用及高性能是不可或缺的概念。高併發涉及系統在短時間內處理大量請求的能力;高可用性關注系統在故障情況下的持續運作能力;而高性能則關注系統快速處理任務、資源利用率高和低延遲的表現,並針對每個概念提供具體的實現方式及最佳實踐,幫助讀者瞭解如何在實務中提升系統的整體效能。
在軟體開發中,客戶經常會遇到無法訪問公司網頁的問題,但這類問題常常難以從日誌中查找解決方案。本文探討了有效的解決方式,特別是利用HTTP Archive(HAR)檔案來分析問題根本,幫助客戶瞭解問題的來源,包括使用有用的工具來進行資訊解析。透過案例與經驗分享,讓讀者能更有效地應對類似挑戰。
在這篇文章中,我們將探討常見的下載中斷問題,尤其針對高畫質影片或大檔案的傳輸困難。通過問題描述與解析,我們發現影響下載成功的因素,並提出利用 byte-range 技術進行分段傳輸的解決方案。此外,也會說明調整 header 的重要性,幫助開發者有效改善用戶下載體驗。
在軟體工程中,文件管理常被忽視,但對於多方協作至關重要。本文深入探討API文件、YAML格式和UML圖的應用,強調保持文件的版本控制,使用Swagger和Markdown工具提升可讀性與協作效率。此外,我們將討論如何利用PlantUML輕鬆繪製UML圖,以促進開發團隊之間的有效溝通與理解。
本文介紹了代理伺服器的重要性及其主要功能,包括請求轉發、響應回傳、隱私保護、內容過濾等。此外,本文還探討了各類型的代理伺服器,如正向代理、反向代理、透明代理和高匿名代理,以及它們在網路架構中的角色。瞭解這些概念不僅能增進對網路安全的認識,還能在選擇合適的解決方案時提供幫助。
在資料分析中,資料處理和可視化是不可或缺的兩項重要任務。本文介紹了 ELK 系統(包括 Elasticsearch、Logstash 和 Kibana)以及 Grafana 的核心功能及其在日誌管理和資料分析中的作用,幫助讀者理解這些工具如何提升資料處理效率和可視化效果,從而更好地應用於真實場景中。
在系統架構領域,高併發、高可用及高性能是不可或缺的概念。高併發涉及系統在短時間內處理大量請求的能力;高可用性關注系統在故障情況下的持續運作能力;而高性能則關注系統快速處理任務、資源利用率高和低延遲的表現,並針對每個概念提供具體的實現方式及最佳實踐,幫助讀者瞭解如何在實務中提升系統的整體效能。