新手村導讀 - 2: 初入PHP

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

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

事事寫 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
avatar-img
2會員
32內容數
test
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
林柏宇的沙龍 的其他內容
這篇文章介紹了面試時以及開始工作後可能會遇到的問題,包括物件導向OOP、SOLID 設計原則、測試方式,以及 Cookie、Session 與 Cache 的相似處與不同處。提供了豐富的相關資訊。
這篇文章介紹了面試時以及開始工作後可能會遇到的問題,包括物件導向OOP、SOLID 設計原則、測試方式,以及 Cookie、Session 與 Cache 的相似處與不同處。提供了豐富的相關資訊。
你可能也想看
Google News 追蹤
提問的內容越是清晰,強者、聰明人越能在短時間內做判斷、給出精準的建議,他們會對你產生「好印象」,認定你是「積極」的人,有機會、好人脈會不自覺地想引薦給你
Thumbnail
本章節旨在介紹如何在不同操作系統上安裝和配置PHP環境,並使用命令行工具進行基礎操作。此外,還介紹了使用Visual Studio Code進行PHP開發的步驟,包括安裝擴展和設置調試環境。
Thumbnail
在本節中,我們介紹了PHP的基本語法,包括如何在HTML中嵌入PHP代碼,PHP腳本的執行順序,以及多種註解方式。我們還學習了如何定義和使用變數,包括單個變數和多個變數的賦值方法。這些基礎知識將幫助你開始使用PHP進行Web開發。
Thumbnail
這個章節介紹了PHP的基本特性和應用領域,並且列舉了使用PHP的知名公司和網站。了解PHP的簡單易學、跨平台、嵌入HTML等特性,以及PHP在動態網站、電子商務、內容管理系統、社交媒體平台、數據庫管理和API開發中的應用。
Thumbnail
你好,在下最近在學習開發web,學了html css js,也得出一些心得,由於網路上已有許多教學,所以我會著重在如何開發出to do List,以及解釋我寫的程式碼。相關的教學我會直接貼網址。如果我有什麼地方出錯,或者是可以寫得更好,歡迎在下方留言,討論。 首先先介紹我的開發環境: 我用了vs
  貴安。內含勸世成分。   下面提到的問題,都是比較難開一篇解釋,或已經在主題中,卻很常發生的問題,也只是我個人建議,經驗分享,速問速達!對你來說可能是幹話,也可能是當頭一棒。   或許你已經經歷過,或許正在經歷,也可能是我經歷過或正是我的問題。   未來若有新增,湊得夠多了會開新篇,也歡迎
Thumbnail
原「主編後記」裡的分享(新單元新嘗試)。思考著,如果能讓更多人接收到這些知識點就更棒了⋯⋯
提問的內容越是清晰,強者、聰明人越能在短時間內做判斷、給出精準的建議,他們會對你產生「好印象」,認定你是「積極」的人,有機會、好人脈會不自覺地想引薦給你
Thumbnail
本章節旨在介紹如何在不同操作系統上安裝和配置PHP環境,並使用命令行工具進行基礎操作。此外,還介紹了使用Visual Studio Code進行PHP開發的步驟,包括安裝擴展和設置調試環境。
Thumbnail
在本節中,我們介紹了PHP的基本語法,包括如何在HTML中嵌入PHP代碼,PHP腳本的執行順序,以及多種註解方式。我們還學習了如何定義和使用變數,包括單個變數和多個變數的賦值方法。這些基礎知識將幫助你開始使用PHP進行Web開發。
Thumbnail
這個章節介紹了PHP的基本特性和應用領域,並且列舉了使用PHP的知名公司和網站。了解PHP的簡單易學、跨平台、嵌入HTML等特性,以及PHP在動態網站、電子商務、內容管理系統、社交媒體平台、數據庫管理和API開發中的應用。
Thumbnail
你好,在下最近在學習開發web,學了html css js,也得出一些心得,由於網路上已有許多教學,所以我會著重在如何開發出to do List,以及解釋我寫的程式碼。相關的教學我會直接貼網址。如果我有什麼地方出錯,或者是可以寫得更好,歡迎在下方留言,討論。 首先先介紹我的開發環境: 我用了vs
  貴安。內含勸世成分。   下面提到的問題,都是比較難開一篇解釋,或已經在主題中,卻很常發生的問題,也只是我個人建議,經驗分享,速問速達!對你來說可能是幹話,也可能是當頭一棒。   或許你已經經歷過,或許正在經歷,也可能是我經歷過或正是我的問題。   未來若有新增,湊得夠多了會開新篇,也歡迎
Thumbnail
原「主編後記」裡的分享(新單元新嘗試)。思考著,如果能讓更多人接收到這些知識點就更棒了⋯⋯