新手村導讀 - 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會員
28內容數
test
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
林柏宇的沙龍 的其他內容
這篇文章介紹了面試時以及開始工作後可能會遇到的問題,包括物件導向OOP、SOLID 設計原則、測試方式,以及 Cookie、Session 與 Cache 的相似處與不同處。提供了豐富的相關資訊。
這篇文章介紹了面試時以及開始工作後可能會遇到的問題,包括物件導向OOP、SOLID 設計原則、測試方式,以及 Cookie、Session 與 Cache 的相似處與不同處。提供了豐富的相關資訊。
你可能也想看
Google News 追蹤
Thumbnail
隨著理財資訊的普及,越來越多台灣人不再將資產侷限於台股,而是將視野拓展到國際市場。特別是美國市場,其豐富的理財選擇,讓不少人開始思考將資金配置於海外市場的可能性。 然而,要參與美國市場並不只是盲目跟隨標的這麼簡單,而是需要策略和方式,尤其對新手而言,除了選股以外還會遇到語言、開戶流程、Ap
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
原「主編後記」裡的分享(新單元新嘗試)。思考著,如果能讓更多人接收到這些知識點就更棒了⋯⋯
Thumbnail
隨著理財資訊的普及,越來越多台灣人不再將資產侷限於台股,而是將視野拓展到國際市場。特別是美國市場,其豐富的理財選擇,讓不少人開始思考將資金配置於海外市場的可能性。 然而,要參與美國市場並不只是盲目跟隨標的這麼簡單,而是需要策略和方式,尤其對新手而言,除了選股以外還會遇到語言、開戶流程、Ap
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
原「主編後記」裡的分享(新單元新嘗試)。思考著,如果能讓更多人接收到這些知識點就更棒了⋯⋯