2024-06-30|閱讀時間 ‧ 約 26 分鐘

新手村導讀 - 2: 初入PHP

這篇就來介紹工作後最常遇到的幾個小(?)問題吧。

事事寫 Log

強烈建議大家要養成寫 Log 的好習慣,這除了幫助你自己更好的 debug,也能幫助後面可能有需要查找發生問題點的人們。

當然,也能更好把鍋推給別人(不太對)

在寫 Log 的時候,除了記得要寫清楚發生的事件、時間、地點,更重要的是要分清楚 Log 的層級,這樣才能讓 Log 更有用。

一般來說, Log 的層級主要分為以下幾種:

  1. Trace: 追蹤程式執行過程,通常是最詳細的 Log。
  2. Debug: 開發時除錯用的 Log,通常是用於開發過程中,用來追蹤程式執行過程中的變數值、函數呼叫等。通常測試環境設定檔會設定在這個層級。
  3. Info: 一般性資訊,通常是用來記錄程式執行過程中的重要事件,例如程式啟動、結束等。
  4. Warning: 警示警告,通常是用來記錄程式執行過程中的一些不正常事件,例如檔案不存在、網路連線異常等。通常這個層級的錯誤不會讓程式停止執行,但須要確認是否有些問題。
  5. Error: 錯誤事件,通常是用來記錄會讓程式停止執行的重大錯誤,例如檔案讀寫錯誤、資料庫連線異常等。通常線上環境設定檔會設定在這個層級。

更多層級詳情可以看這篇文章: Zam 大大的文章

此外,範例程式碼:

use App\Facades\Log;
Log::traceLog()->debug(’看你要記錄什麼內容’);

本地印出錯誤或過程

相信有些人跟我一樣不喜歡把東西丟到測試環境後才知道錯誤,畢竟測試環境的 Log 人人都可以看,一不小心就會被人發現你犯了低級錯誤(?)

所以我們可以在本地印出錯誤或過程,這樣我們就可以在本地就知道錯誤在哪裡了!

如果是用 PHP 的話,你可以使用 dd() 來印出變數,或是使用 var_dump() 來印出類型+內容。

這兩個最主要的差別是 dd() 會停止程式,而 var_dump() 不會。

此外,如果是用 Laravel 的話,你可以使用 dump 來印出 內容,不僅有顏色也更易讀。

PHPCS

PHPCS 全名為 PHP_CodeSniffer,這個工具可以設定 PHP 的排版規則,讓共同開發的大家 Coding Style 一致,不僅增加程式碼的可讀性,也可以避免一些不必要的錯誤。

PHPCS 包含了空格、換行、縮排、命名規則等等,可以透過設定檔來自訂規則,也可以使用別人已經設定好的規則。

在設定好規則後,可以透過指令來檢查程式碼是否符合規則,或是透過指令來修正不符合規則的程式碼,十分方便!

自動調整程式碼符合規則的指令: ./vendor/bin/phpcbf ./

變數儲存於設定檔

這一項就相對重要一些,畢竟算是資安等級的事情。

以前在本地獨立開發的時候,我們常會將使用 api 的 key、 DB 連線的帳號密碼等等直接寫在程式碼裡面,這樣的確方便了開發,但是一旦上線之後,這些資料就會暴露在外,這樣的做法是非常不安全的。

因此,取而代之我們應該將這些資料儲存於設定檔中(例如 .env 檔中),並且在程式碼中引用這些設定檔內容,這樣就可以避免這些資料被外人看到。

除此之外,這樣的做法也有一個好處,就是當我們需要更改這些資料時,只需要更改設定檔中的內容,而不需要更改程式碼,這樣就可以避免因為更改資料而導致的錯誤。

避免魔術數字( magic number )

跟前面一點類似,有些因為商務邏輯或是討論評估過後的數字,會在程式碼中出現多次,這時候就應該把這些數字定義成常數。

這樣可以讓程式碼更容易閱讀,也可以避免因為數字改變而需要修改多處的問題。

最重要的是,將這些數字額外建立 Enum 管理後可以額外花空間寫註解,不僅不影響原本的程式碼,也可以讓其他人更容易了解這些數字的意義。

程式碼靜態分析與動態分析

靜態分析指的是在程式碼不運作的前提下,讓程式去判定 code 本身的格式錯誤、潛在安全性問題以及每個功能平均行數大小等等。

動態分析則是在程式碼運作的時候,去觀察程式碼的運作狀況,例如:記憶體使用量、CPU 使用量、程式碼執行時間等等。

每個套件或是每家公司的分析項目其實都略有不同,因此這邊就不一一贅述,主要是想提醒大家善用這些工具可以提高開發效率與品質。

參考資料:

  1. Laravel dd() vs dump() vs var_dump() vs print_r() with Example - Shouts.dev
  2. PHP Mess Detector | PhpStorm Documentation
  3. 用自動化靜態掃描提升 code review 效率. Code Review 總讓人感到費神 | by Genchi Lu | Medium
分享至
成為作者繼續創作的動力吧!
© 2024 vocus All rights reserved.