
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 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を魔法ではないとマークします。
詳細については、Converting.mdを参照してください。
MITライセンス(MIT)。詳細については、ライセンスをご覧ください。