重構代碼是構建和維護軟件的重要方面。
手工重構代碼時,無論您是使用舊代碼還是創建新代碼,都很容易出錯,例如在重命名方法時忘記使用代碼的地方。這就是為什么我喜歡定期使用phpstorm的重構功能的原因。? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?(推薦學習:phpstorm)
如果這是您第一次聽說該術語,那么Martin Fowler會將重構描述為:
重構是一種用于改進現有代碼庫設計的受控技術。它的本質是應用一系列小的行為保留轉換,每個轉換“都太小,不值得做?”。但是,每個轉換的累積效果都非常顯著。通過分步進行,可以降低引入錯誤的風險。您還可以避免在進行重組時損壞系統,這使您可以在較長的時間內逐步重構系統。
重構涵蓋了一系列不同的技術,包括移動,提取,復制,刪除和重命名。這些內容涵蓋了您可能會不斷對代碼進行的所有類型的更改。
立即學習“PHP免費學習筆記(深入)”;
很高興,PhpStorm的重構功能(包含在核心軟件包中)支持所有這些功能。在本教程中,我將逐步介紹其中的一些。特別:
將代碼提取到新方法
重命名功能
更改功能的簽名
將代碼提取為新方法
將代碼提取到新方法是重構,我的工作比大多數(也許其他任何事情)都要多。我無法數出遇到長函數的次數,可以將長函數分解為一系列更小,更可重用,更可測試的函數來更好地組織它們。
以下面的函數為例。
public?function?populate($data) { ????if?(is_array($data)?&&?empty($data))?{ ????????throw?new?HydrationException(); ????} ????$this->id?=?$data['id']; ????$this->userId?=?$data['userId']; ????$this->entry?=?$data['entry']; ????$this->created?=?$data['created']; ????$this->updated?=?$data['updated']; }
盡管很小,但對于此示例而言已足夠。假設該函數末尾的五行是該類其他部分所需要的,或者可以在單獨的函數中更好地使用。
我們要做的是將它們提取到一個單獨的方法中。為此,我們首先突出顯示要提取的行,然后單擊“重構->提取->方法”。這將顯示“提取方法”對話框,您可以在下面看到該對話框,并預先填充了一組默認選項。
我們要做的最少工作是為方法填寫一個名稱。其余選項可以保留,因為它們是一組很好的默認值。但是,我還做了另一件事,那就是為唯一的參數指定類型提示
$data
這樣,功能就更加清晰了,并且生成的PhpDoc塊也將包含該信息。單擊“重構”既可以生成新方法,也可以用對其的調用替換突出顯示的代碼,您可以在下面看到。
public?function?populate($data) { ????if?(is_array($data)?&&?empty($data))?{ ????????throw?new?HydrationException(); ????} ????$this->hydrateMemberVariables($data); } ///...intervening?code public?function?populate($data) { ????if?(is_array($data)?&&?empty($data))?{ ????????throw?new?HydrationException(); ????} ????$this->hydrateMemberVariables($data); }