新手村導讀 - 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
1會員
2內容數
test
留言0
查看全部
發表第一個留言支持創作者!
林柏宇的沙龍 的其他內容
新手村導讀 - 1: 初入軟體業
閱讀時間約 2 分鐘
你可能也想看
防曬產品係數測試報告彙整(2024年)從2014年起,自己對於市售防曬產品的效能產生了濃厚的興趣。因為當時候發現不少產品的防曬係數其實標示是有問題的,像是原本應該是人體測試的SPF與PA數值,實際上沒有做,只用機器測試的數據來充當,但這兩者卻有很大的差異。像是防曬係數其實有強度、廣度與平均度三個面向需要一起判斷,但多數廠商並沒有完整標示
Thumbnail
新手村...剛進入股票市場的投資新手, 必定要經歷排山倒水而來的各種股票相關知識, ex:價值投資(基本面分析/總體經濟....), 技術分析(MACD,KD,RSI....), 學習到相關知識後 經過幾張K棒圖的回測,迫不及待把現金投入市場...... 不知大家有沒有玩過RPG(角色冒險)遊戲, 等級LV.
Thumbnail
新手村:我們從「那是什麼」開始小孩出生後面臨黃疸、發炎指數過高等問題,除了常感到焦慮,還需要做許多決定。可能養育孩子就是一個漫長的旅程,從依附到放手到獨立。
2024-03-24
Crypto新手村-空投任務怎麼做?哪裡可以做?需要先準備甚麼嗎?空投事先準備 在過去這段時間,我有做過一些空投的任務,而大部分的空投都必須會有一些共通的條件需要完成,例如追蹤且加入社群、鏈上交互數據、轉發特定文章等等, 因此如果將以下幾項基本社群帳號準備好,對接下來開始空投交互任務將會事半功倍: 錢包: 錢包是空投項目用以判斷在生態項目活躍程度的一項重要工具
Thumbnail
2023-11-26
Crypto新手村-空投生態介紹及為何我開始做空投任務空投是甚麼? 空投(Airdrop)是一種加密貨幣生態用以分發數位資產或代幣的方法。這種方法是將數位資產免費分發給特定的目標群體,例如持有特定代幣的人、社群成員、或是在生態或使用產品以達到特定條件下的用戶。空投通常是項目方為了促進社群參與、擴大知名度、增加代幣分發的方式。這可能有助於建立項目的社群
Thumbnail
2023-11-19
Crypto新手村-穩定幣是甚麼(USDT、USDC、DAI...)如果要開始投資加密貨幣,最常見的方法是先將手上的法幣轉換成加密貨幣後,再以穩定幣到交易所或是鏈上defi協議去交易想投資的幣種,如BTC、ETH等等。 但沒接觸過加密貨幣的人會想問,穩定幣又是甚麼呢? 穩定幣(Stablecoin)是一種加密貨幣,其價值相對穩定或固定在某個特定的價值,通常是
Thumbnail
2023-11-12
2023-08-27
【新手村】挑選閱讀器?太難了吧?其實本來想說閱讀器挑選有一堆人做了,應該不需要我特別來寫,但是發現大家依然有這個問題,然後新的閱讀器也多了很多加上彩機也加入混戰,似乎還是有很多人沒有搞清楚該怎麼挑選,因而認為閱讀器很雞肋或是買錯。所以我來寫一篇我認為挑選閱讀器應該要先做的幾樣功課和先搞清楚的地方!
Thumbnail
2022-12-22
新手村的日子在興致勃勃的想養狗情緒下,約好了一起休假三天準備帶小狗回家 剛好遇到周末假期,星期六的收容所人潮滿滿 不是第一次進去的我,仍然訝異裡面的狗狗數量永遠領養不完 甚至很多品種狗也常常因為生病或是年老被棄養送至收容所 一開始就害怕幼犬愛咬東西的我們決定領養一隻成犬 避免回家打開門家具被咬得亂七八糟以為走錯
Thumbnail
2022-10-18
新手村打木人-外匯交易平台的選擇好不容易稍微弄懂了外匯運作的原理,手上也有一點資金,是時候該入場驗證一下自己學到的東西了,欸等等,天啊上網一查,外匯平台成千上百,平常吃飯就已經選擇困難了,這麼多的平台,到底該選哪一家啊! 黑平台的四大特點 畢竟投入的都是自己辛苦上班的血汗錢,千萬要注意有以下四個特點的黑平台。 無法正常出金
Thumbnail
2022-03-03
方格子導讀|帶你走出新手村,奇幻創作者的最佳夥伴:村長本期導讀的方格子創作者,是在方格子書寫多年,絕對可以直接獲頒VVIP格友勳章的「村長」。 在方格子數以萬計的創作者中,村長屬於筆耕不輟、無懼失敗的熱血份子。從默默發表,到如今有一批小小的粉絲群,他一再以行動證明,創作應當是屬於每個人的事。即使零基礎,只要有心練習,人人都能愛上創作。
Thumbnail
2020-12-07