Ini adalah kumpulan sniff php_codesniffer (3.x) khusus kami untuk mendeteksi potensi bug dan perilaku tak terduga dalam kode PHP. Ini dapat digunakan sebagai aturan sendiri, tetapi terutama dimaksudkan sebagai satu set mengendus terpisah yang dapat diintegrasikan ke dalam standar lain.
Kami menggambarkan motivasi di balik beberapa mengendus di blog kami.
Instal sebagai ketergantungan pengembangan menggunakan komposer:
$ composer require --dev moxio/php-codesniffer-sniffs
Periksa file Anda terhadap himpunan ini:
$ ./vendor/bin/phpcs --standard=vendor/moxio/php-codesniffer-sniffs/MoxioSniffs path/to/your/files
Lebih banyak mengendus akan segera ditambahkan.
Moxiosniffs.php.disallowbarecontinueInswitch : Melarang pernyataan continue tanpa argumen numerik ketika digunakan langsung dalam switch - case . Ini mencegah bug diam yang disebabkan oleh PHP mempertimbangkan switch sebagai struktur looping.
Moxiosniffs.php.disallowImplicitloosecomparison : Melarang perbandingan non-ketat implisit oleh fungsi-fungsi seperti in_array dan array_search . Mensyaratkan bahwa $strict -parameter untuk fungsi -fungsi ini secara eksplisit ditetapkan. Ini mencegah bug tersembunyi karena perilaku kontra-intuitif dari perbandingan yang tidak ketat.
Moxiosniffs.php.disallowimplictloosebase64decode : Melarang penggunaan non-ketat dari fungsi base64_decode . Mensyaratkan bahwa $strict -parameter untuk fungsi ini diatur secara eksplisit.
Moxiosniffs.php.disallowuniqidwithoutmoreentropy : Melarang panggilan ke uniqid() tanpa $more_entropy = true . Ketika $more_entropy false (yang merupakan default), uniqid() memanggil usleep() untuk menghindari tabrakan, yang dapat menjadi hit kinerja yang substansial. Selalu menelepon uniqid() dengan $more_entropy = true menghindari masalah ini.
Moxiosniffs.php.disallowarraycombinerswithsinglearray : Melarang panggilan ke fungsi yang menggabungkan dua atau lebih array dengan hanya satu array yang diberikan sebagai argumen. Ini berlaku untuk fungsi seperti array_merge(_recursive) , array_replace(_recursive) dan semua varian array_diff dan array_intersect . Panggilan seperti itu tidak masuk akal, dan kemungkinan besar merupakan hasil dari koma atau tanda kurung yang salah tempat. Untuk mengindeks ulang array tunggal, cukup gunakan array_values .
Moxiosniffs.php.disallowImplicitMicRotiMeAsstring : Melarang panggilan ke microtime() tanpa argumen $get_as_float yang diatur secara eksplisit. Secara default, microtime memiliki string sebagai nilai pengembaliannya ("msec sec"), yang tidak terduga dan tidak dapat secara naif dilemparkan untuk mengapung, membuatnya rentan kesalahan. Masih dimungkinkan untuk mengatur argumen ini menjadi false , tetapi dalam hal ini Anda mungkin telah memikirkan hal ini.
Moxiosniffs.php.disallowImplicitIrtoarraywithuseys : Melarang panggilan ke iterator_to_array() tanpa argumen $use_keys yang secara eksplisit ditetapkan. Secara default, iterator_to_array menggunakan kunci yang disediakan oleh iterator. Perilaku ini sering diinginkan untuk array asosiatif, tetapi dapat menyebabkan hasil yang tidak terduga untuk array 'seperti daftar'. Secara eksplisit mewajibkan parameter untuk diatur memastikan bahwa pengembang harus memikirkan perilaku mana yang diinginkan untuk situasi yang dihadapi.
Moxiosniffs.php.disallowdateTime : Melarang penggunaan DateTime dan mempromosikan penggunaan DateTimeImmutable . Yang pertama dapat berubah dapat menyebabkan beberapa bug yang halus namun jahat. Lihat posting ini untuk lebih banyak latar belakang mengapa Anda ingin mencegah menggunakan DateTime .
Moxiosniffs.php.disallowmbDetectencoding : Melarang penggunaan mb_detect_encoding . Fungsi ini memiliki nama yang menyesatkan yang menyiratkan itu sebenarnya dapat mendeteksi pengkodean string, masalah yang umumnya tidak mungkin. Sebaliknya ia memeriksa daftar pengkodean sampai menemukan yang bisa menjadi yang tepat (yaitu string adalah urutan byte yang valid sesuai dengan pengkodean itu). Menggunakan mb_check_encoding (mungkin dalam loop) sebagai gantinya membuat ini lebih eksplisit. Lihat pembicaraan ini untuk lebih banyak informasi latar belakang tentang topik ini.
Moxiosniffs.php.disallowutf8encodedecode : Melarang panggilan ke utf8_encode() dan utf8_decode() . Fungsi-fungsi ini dapat dianggap menyesatkan karena mereka hanya mengonversi ke/dari ISO-8859-1, dan tidak 'secara ajaib' mendeteksi pengkodean sumber/target. Menggunakan iconv() atau mb_convert_encoding() sebagai gantinya membuat kedua pengkodean karakter yang berperan dalam konversi eksplisit.
Moxiosniffs.php.disallowdateCreatefromformatwithUnspecifiedTiMeComponent : Melarang panggilan ke DateTime::createFromFormat , DateTimeImmutable::createFromFormat , date_create_from_format & date_create_immutable_from_format , date -create_from_format & date_create_immutable_fromatids, format doTatsness with format do a noFatsOf null. Ini akan membuat objek DateTime (Immutable) dengan komponen waktu yang diatur ke waktu (pembuatan) saat ini, yang mungkin tidak pernah seperti yang Anda inginkan dan dapat menjadi sumber bug.
Setelah memasang dependensi (termasuk dependensi pengembangan) menggunakan komposer, jalankan
$ ./vendor/bin/phpunit
Dari Project Root Dir.
Proyek ini menganut versi semantik.
Harap dicatat bahwa, dari perspektif perpustakaan ini sebagai koleksi sniff pick-and-match (dan bukan standar pengkodean yang lengkap), penambahan sniff baru tidak akan dianggap sebagai perubahan besar dan karenanya tidak menyebabkan peningkatan nomor versi utama.
Mengendus ini dirilis di bawah lisensi MIT.