これは、PHPコードで潜在的なバグと予期しない動作を検出するためのカスタムPHP_CODESNIFFER(3.x)スニフのコレクションです。それはそれ自体でルールセットとして使用される場合がありますが、主に他の標準に統合できる個別のスニフのセットとして意図されています。
私たちのブログで、これらのスニフのいくつかの背後にある動機について説明しました。
作曲家を使用した開発依存関係としてインストールします。
$ composer require --dev moxio/php-codesniffer-sniffs
この一連のスニッフィングに対してファイルを確認してください。
$ ./vendor/bin/phpcs --standard=vendor/moxio/php-codesniffer-sniffs/MoxioSniffs path/to/your/files
より多くのスニフがすぐに追加されます。
moxiosniffs.php.disallowbarecontinueinswitch : switch - case内で直接使用した場合、数値引数なしでcontinueステートメントを許可します。これによりswitchループ構造であると考えるPHPによって引き起こされるサイレントバグを防ぎます。
moxiosniffs.php.disallowimplicitlosecomparsison : in_arrayやarray_searchなどの関数による暗黙の非強制比較を許可します。これらの関数の$strict -parameterが明示的に設定される必要があります。これにより、非強制比較の直感に反する動作により、隠されたバグが防止されます。
moxiosniffs.php.disallowimplicitloosebase64decode : base64_decode関数の暗黙の非ストリック使用法を拒否します。この関数の$strict -parameterが明示的に設定される必要があります。
moxiosniffs.php.disallowuniqidwithoreentropy : $more_entropy = trueなしでuniqid()への呼び出しを許可します。 $more_entropyがfalse (これがデフォルト)の場合、 uniqid()がusleep()を呼び出して衝突を避けます。 $more_entropy = trueで常にuniqid()を呼び出すと、これらの問題は回避されます。
moxiosniffs.php.disallowarraycombiners withsinglearray:2つ以上の配列を、引数として指定された単一の配列のみを組み合わせた関数への呼び出しを許可します。これはarray_merge(_recursive) 、 array_replace(_recursive) 、 array_diffおよびarray_intersectのすべてのバリエーションなどの関数に適用されます。このような呼び出しは意味をなさないため、おそらくコンマまたは括弧の誤った結果です。単一の配列を再インドするには、 array_valuesを使用するだけです。
moxiosniffs.php.disallowimplicitmicrotimeasstring : $get_as_float引数が明示的に設定されていない場合、 microtime()への呼び出しを許可します。デフォルトでは、 microtimeにはリターン値(「MSEC SEC」)として文字列があります。これは予期しないことであり、フロートするために素朴にキャストできないため、エラーが発生しやすくなります。この議論をfalseに設定することはまだ可能ですが、その場合、おそらくこれについて考えたことがあります。
moxiosniffs.php.disallowimplicititeratortoartoarraywithusekeys : $use_keys引数が明示的に設定されていない場合、 iterator_to_array()への呼び出しを許可します。デフォルトでは、 iterator_to_array Iteratorが提供するキーを使用します。この動作は、多くの場合、連想配列に望まれますが、「リストのような」アレイに予期しない結果を引き起こす可能性があります。パラメーターの設定を明示的に要求することにより、開発者が目前の状況に対してどの動作が望まれるかを考慮する必要があることが保証されます。
moxiosniffs.php.disallowdateTime : DateTimeの使用を許可し、代わりにDateTimeImmutableの使用を促進します。前者は可変である可能性があり、微妙ではあるが厄介なバグにつながる可能性があります。 DateTimeを使用して阻止したい理由についての詳細については、この投稿を参照してください。
moxiosniffs.php.disallowmbdetectencoding : mb_detect_encodingの使用を許可します。この関数には誤解を招く名前があり、実際に文字列のエンコードを検出できることを意味します。これは一般的に不可能です。むしろ、エンコーディングのリストをチェックします。エンコーディングは正しいものになる可能性があるものが見つかるまで確認します(つまり、文字列はエンコードに応じて有効なバイトシーケンスです)。代わりに、 mb_check_encoding (おそらくループ内)を使用すると、これがはるかに明確になります。このトピックに関するより背景情報については、この講演を参照してください。
moxiosniffs.php.disallowutf8encodedecode : utf8_encode()およびutf8_decode()への呼び出しをdisolows ollowsこれらの関数は、ISO-8859-1からのみ変換され、ソース/ターゲットエンコーディングを「魔法のように」検出しないため、誤解を招くと見なすことができます。代わりに、 iconv()またはmb_convert_encoding()を使用すると、両方の文字エンコーディングが変換で役割を果たします。
moxiosniffs.php.disallowdatecreatefromatunspecifiedtimecomponent : DateTime::createFromFormat DateTimeImmutable::createFromFormat date_create_from_format & date_create_immutable_from_format of specify with with with with who not firetise firite_from_from_from_from_from_from_from_from_from_from_from_from_from_from_from_from_from_from_from_from_from_from_from_from_from_from_fromヌル。それ以外の場合、これにより、現在の(作成)時間に設定された時間コンポーネントを備えたDateTime(不変)オブジェクトが作成されます。
Composerを使用して依存関係(開発依存関係を含む)をインストールした後、実行します
$ ./vendor/bin/phpunit
プロジェクトルート監督から。
このプロジェクトは、セマンティックバージョンに準拠しています。
このライブラリのスニフのピックアンドマッチコレクション(完全なコーディング標準ではない)としてのコレクションとしての観点から、新しいスニフの追加は壊れた変化とは見なされず、したがって、メジャーバージョン番号の増加を引き起こさないことに注意してください。
これらのスニフは、MITライセンスの下でリリースされます。