- 在 foreach 中不要使用 array_merge舀透,不僅慢而且耗費內(nèi)存栓票,可以在 foreach 中對要合并的數(shù)組進行賦值,在 foreach 外部統(tǒng)一進行合并愕够,具體性能差異可以參考這篇文章:不要在循環(huán)體中使用 array_merge()
- 在 foreach 中也不要使用 array_push走贪,可以通過向數(shù)組中賦值的方式代替,比如:
student['id']惑芭, 而不是 array_push(
student['id'])坠狡,具體性能差異可以參考這篇文章:不要在循環(huán)體中使用 array_push()
- 針對一些查詢較為復雜或者比較核心的邏輯里的 sql 查詢,可以將 sql 語句寫到注釋中遂跟,這樣看代碼的時候不用再去拼接 sql逃沿,直接用注釋中的 sql 拿來排查問題
- 如果使用 phpstorm 可以安裝 php inspections 插件來進行代碼的靜態(tài)分析,可以幫助查找代碼規(guī)范幻锁,語法漏洞凯亮,函數(shù)使用方式方面的錯誤。其他的一些代碼質(zhì)量工具可以配置使用 phpcs哄尔,phpmd假消,phpcs-fixer,psalm岭接,phpstan 等置谦。而且可以通過 phpstorm 的熱鍵錄制功能堂鲤,將徽標鍵 + s 設置為 phpcs-fixer,format code 的快捷鍵媒峡,這樣寫完時可以通過快捷鍵格式化代碼。
- 為避免在項目中將 dd葵擎,var_dump谅阿,exit,die 等函數(shù)提交到遠程版本庫中酬滤,可以在項目的 .git/hooks/pre-commit 中進行控制签餐,加入下面的代碼,每次提交時可以檢測到盯串。參考的這個:pre-commit
VAR=$(git diff --cached --diff-filter=ACMR | grep -wiE "var_dump|echo|exit|dd|die|console.log") if [ ! -z "\$VAR" ]; then echo "You've left a dd, var_dump, exit, die or console.log in one of your files! You don't really want to commit this so aborting now..." exit 1 fi
- 在 for 循環(huán)的條件中不要使用函數(shù)氯檐,例如使用 count 來計算總數(shù),這樣每次循環(huán)都會執(zhí)行一遍体捏,不太好
- 使用三元運算符時如果要做強制類型轉(zhuǎn)換請記得要在運算區(qū)域加括號避免報錯冠摄,例如:(string)$studentId ?? "",這樣的寫法會產(chǎn)生歧義几缭,如果同為字符串不會報錯河泳,如果是這樣:(string)$studentId ?? null,那么就會報錯年栓。建議寫成 (string)($studentId ?? null)
- 如果要做判斷時要確定好運算符的優(yōu)先級從而確保執(zhí)行順序拆挥,以免與預期相左,例如:
if ($isNew && $student = Stu::find($id) && isset($foo->con)) { ... }
因為邏輯運算符 && 的運算優(yōu)先級大于賦值運算符 =某抓,所以上面這段代碼可能會產(chǎn)生與預期不符的結(jié)果纸兔,這種情況下為保證執(zhí)行順序,盡量使用括號括起來否副。
包括下面這種:
if (!isset($student['birthday']) > time()) { ... }
雖然邏輯運算符 汉矿!的優(yōu)先級大于比較運算符 >,但手冊中依然建議使用括號來明確運算順序來增加代碼可讀性副编,手冊中是這么說的:
“括號的使用负甸,哪怕在不是必要的場合下,通過括號的配對來明確標明運算順序痹届,而非靠運算符優(yōu)先級和結(jié)合性來決定呻待,通常能夠增加代碼的可讀性《痈”