高級 PHP 工程師必備的編碼技巧及思惟

好的開發者一般以代碼質量來定義。在軟件行業,寫好的代碼意味着在在測試,更新,擴展或者修復漏洞中省錢。本文,我將向你展現一些現實生活中技巧和想法的例子,來幫助你清理你的邏輯代碼,重構它,讓它變得更健壯和模塊化。這些技巧將不只僅幫助你重構你的舊代碼,並且給你一些如何從如今開始寫出簡潔代碼的好建議。php

個人官方羣點擊此處html

什麼是重構,爲何咱們須要它?

重構是指幫組咱們寫簡潔代碼的方法和步驟。這對其餘可能閱讀,擴展和不須要怎麼編輯來複用咱們代碼的其餘開發者來講是很重要的。laravel

下面的內容將向你展現一些重構邏輯代碼,讓它變得更好的例子。sql


不要在沒有單元測試的狀況下重構生產環境的代碼

個人第一條建議是從不在沒有徹底進行單元測試的狀況下開始重構邏輯代碼。個人理由是:你將會以很難有修復的損壞的功能收尾,由於你也很難指出是哪裏損壞了。所以,若是你要重構它,從測試開始。保證你準備重構的部分被測試覆蓋到。PHPUnit 代碼覆蓋分析.shell


從你代碼最底層開始重構

看一下下面的圖片。這是一個我從 Github 找到的真實的酒店管理系統項目。這是一個開源的項目,可想閉源項目將是糟糕的。編程





示例:從底層開始重構數組

你看這個代碼,這裏用紅色標出了三個層級。最底層應該是在第一個 if 條件下被 if/else 包圍的申明。一般,最底層是集中在單一邏輯處理,比較容易重構。服務器


讓你的方法更短,分解它們到更小的方法或者配置文件 / DB 表

也許在這裏,咱們能夠向下面同樣提煉它到一個私有方法:架構





使你的方法更短併發

下一個深刻點將是上傳參數和加載視圖。如今,再來看看在重構其餘部分以後的 add() 方法。它變得更加簡潔,易讀,易於測試。





示例:首先重構最底層


if 申明堅持使用大括號

大多數編程語言都支持單行 if 申明,由於這樣比較簡單,因此一些開發就這麼使用,可是這樣不便於閱讀,並且容易形成問題,由於一個空行就能夠中斷條件形成崩潰。看下下面兩個示例的不一樣:





示例:使用大括號


別使用魔術數字或者魔術字符串:

下個示例中,你注意到若是房間超過 250 ,會返回一個錯誤信息。這裏,250 就被認爲是一個魔術數字。若是你不是寫這個的開發者,很難指出這個數字表示什麼。





示例:魔術數字

爲了重構這個方法,咱們能夠指出 250 表示最大的房間數。爲了替換硬編碼,咱們能夠提取它到一個變量 $maxAvailableRooms 。如今對其餘開發者來講,它變得更易被理解。





示例:修復魔術數字


不要使用 else 申明,若是你不是真的須要:

在相同的 availablerooms () 函數中,你注意到那個 if 申明, 其中咱們能夠很容易擺脫 else 部分,並且邏輯保持一致。





示例:忽略 else 申明


使用可以表示你的方法,變量和測試的命名

在後面的示例中,你會發現酒店管理系統有兩個方法分別是 「index () 」 和 「 room_m () 」。 對我來講,我搞不清它們的目的是什麼。我認爲它應該很容易被理解,若是它們的命名都可以描述本身。





示例:很差的方法命名


充分利用你的編程語言的功能

許多開發者不會利用到他們使用的編程語言的所有功能。不少功能可以節約大家的的時間,並且可以讓大家的代碼更健壯。看下下面的示例,注意如何在更少代碼狀況下更容易達到相同的結果的,經過使用類型提示。









最後,我想提供一些關於更好編碼的快速提示:

  • 使用新的數組形式 [] 替代舊的 array ()。
  • 除非不檢查數據類型很重要,不然使用 === 操做符替代 ==。
  • 給公共方法提供簡短的描述性名稱老是一個好主意。私有方法可使用更長的名稱,由於它們的適用範圍比較有限。
  • 僅對實現接口的方法使用通用名稱例如 add (),並對單個類方法使用描述性名稱例如 addUser () 或 addDocument ()。
  • 從類中刪除未使用的方法。
  • 對返回值爲 boolean 等的函數使用 is/has 前綴:isAdmin ($user),hasPermission ($user)。
  • 始終在類方法和屬性中使用訪問修飾符。
  • 注意接口污染:僅使用用戶能夠公開使用的方法。
  • 在公共方法位於頂部的位置組織類方法。
  • 始終在類中應用單一職責的概念。
  • 以上內容但願幫助到你們,不少PHPer在進階的時候總會遇到一些問題和瓶頸,業務代碼寫多了沒有方向感,不知道該從那裏入手去提高,對此我整理了一些資料,包括但不限於:分佈式架構、高可擴展、高性能、高併發、服務器性能調優、TP6,laravel,YII2,Redis,Swoole、Swoft、Kafka、Mysql優化、shell腳本、Docker、微服務、Nginx等多個知識點高級進階乾貨須要的能夠免費分享給你們,須要的能夠加入個人官方羣點擊此處。 
相關文章
相關標籤/搜索