
phpmnd是一種工具,旨在幫助您檢測PHP代碼中的魔法數字。默認情況下,0和1不被認為是魔術數字。
魔術數字是數字字面的,它不能定義為常數,但可能會在以後發生變化,因此很難更新。在沒有解釋的情況下,直接在任何源代碼中直接使用數字被認為是不良的編程實踐。在大多數情況下,這使得程序更難閱讀,理解和維護。
考慮以下假設代碼:
class Foo
{
public function setPassword ( $ password )
{
// don't do this
if ( mb_strlen ( $ password ) > 7 ) {
throw new InvalidArgumentException ( " password " );
}
}
}應該重構為:
class Foo
{
const MAX_PASSWORD_LENGTH = 7 ; // not const SEVEN = 7 :)
public function setPassword ( $ password )
{
if ( mb_strlen ( $ password ) > self :: MAX_PASSWORD_LENGTH ) {
throw new InvalidArgumentException ( " password " );
}
}
}這顯然改善了代碼的可讀性,還降低了其維護成本。
當然,並非每個字面數字都是一個神奇的數字。
$ is_even = $ number % 2 === 0當然,在這種情況下,數字2不是一個魔術數字。
我的經驗法則:
If the number came from business specs and is used directly - it's a magic number.
您可以使用Composer:
$ composer require --dev povils/phpmnd之後,您可以使用vendor/bin/phpmnd可執行文件調用它。
要在全球安裝它,簡單地運行:
$ composer global require povils/phpmnd之後,請確保您的PATH中有全球作曲家二進製文件目錄。一些Unix系統的示例:
$ export PATH= " $PATH : $HOME /.composer/vendor/bin " 
$ phpmnd wordpress --ignore-numbers=2,-1 --ignore-funcs=round,sleep --exclude=tests --progress
--extensions=default_parameter,-return,argument --allow-array-mapping使用“數組”擴展程序時,允許鍵作為字符串。
--exclude-file選項將排除代碼分析中的文件。允許多個值。
--exclude-path選項將從代碼分析中排除必須與源相關的路徑。允許多個值。
--exclude選項將從代碼分析中排除必須與源相關的目錄。允許多個值(例如-exclude = tests -exclude =示例)。
--extensions選項使您可以擴展代碼分析。提供的擴展名必須分開。
--hint選項將根據您的代碼庫常數替換魔術數字。
當使用“參數”擴展程序時, --ignore-funcs選項將排除逗號分隔函數的列表。默認為intval , floatval , strval 。
--ignore-numbers選項將排除從代碼分析中分離的逗號分隔數列表。
使用“字符串”選項時, --ignore-strings選項將排除代碼分析的字符串。
--include-numeric-string選項強制數字字符串(例如“ 1234”)也被視為數字。
--progress選項將顯示一個進度欄。
--strings選項將在代碼分析中包括字符串搜索。
--suffixes選項將配置有效源代碼文件擴展名的逗號分隔列表。
--whitelist選項將僅處理指定的文件中列出的文件。這對於增量分析很有用。
--xml-output選項將以選項指定的路徑以XML格式生成報告。默認情況下,它可以分析條件,返回語句和切換案例。
round ( $ number , 4 ); $ array = [ 200 , 201 ]; $ var = 10 ; function foo( $ default = 3 ); $ bar = $ foo * 20 ; private $ bar = 10 ; return 5 ; $ var < 7 ;case 3 ;如果擴展以減去開頭,則意味著這些將從代碼分析中刪除。我建議通過在使用任何這些擴展名之前使用默認擴展名來清理您的代碼。
有時需要魔術數字。例如,實現已知的數學公式,默認intval下, floatval和strval將數字標記為非魔術。
例如
$percent = $number / 100;
將顯示100作為魔術數字
$percent = $number / intval(100);
會標記100個不是魔術。
有關更多信息,請參見dragting.md。
麻省理工學院許可證(麻省理工學院)。請參閱許可證以獲取更多信息。