
phpmnd adalah alat yang bertujuan untuk membantu Anda mendeteksi angka ajaib dalam kode PHP Anda. Secara default 0 dan 1 tidak dianggap sebagai angka ajaib.
Angka ajaib adalah literal numerik yang tidak didefinisikan sebagai konstan, tetapi yang dapat berubah pada tahap selanjutnya, dan karenanya bisa sulit diperbarui. Ini dianggap sebagai praktik pemrograman yang buruk untuk menggunakan angka secara langsung dalam kode sumber apa pun tanpa penjelasan. Dalam kebanyakan kasus ini membuat program lebih sulit dibaca, dipahami, dan dipelihara.
Pertimbangkan kode hipotetis berikut:
class Foo
{
public function setPassword ( $ password )
{
// don't do this
if ( mb_strlen ( $ password ) > 7 ) {
throw new InvalidArgumentException ( " password " );
}
}
}yang harus direfaktor untuk:
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 " );
}
}
}Ini jelas meningkatkan keterbacaan kode dan juga mengurangi biaya perawatannya.
Tentu saja tidak setiap angka literal adalah angka ajaib.
$ is_even = $ number % 2 === 0Tentunya dalam hal ini nomor 2 bukan angka ajaib.
Aturan praktis saya:
If the number came from business specs and is used directly - it's a magic number.
Anda dapat menambahkan alat ini sebagai ketergantungan pengembangan lokal, per-proyek, dengan proyek Anda dengan menggunakan komposer:
$ composer require --dev povils/phpmnd Setelah itu Anda kemudian dapat memohonnya menggunakan vendor/bin/phpmnd yang dapat dieksekusi.
Untuk menginstalnya secara global cukup jalankan:
$ composer global require povils/phpmnd Setelah itu pastikan Anda memiliki direktori binari komposer global di PATH Anda. Contoh untuk beberapa sistem 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 Opsi --allow-array-mapping memungkinkan tombol sebagai string saat menggunakan ekstensi "Array".
Opsi --exclude-file akan mengecualikan file dari analisis kode. Beberapa nilai diperbolehkan.
Opsi --exclude-path akan mengecualikan jalur, yang harus relatif terhadap sumber, dari analisis kode. Beberapa nilai diperbolehkan.
Opsi --exclude akan mengecualikan direktori, yang harus relatif terhadap sumber, dari analisis kode. Beberapa nilai diperbolehkan (misalnya --Exclude = tes --Exclude = Contoh).
Opsi --extensions memungkinkan Anda memperluas analisis kode. Ekstensi yang disediakan harus dipisahkan koma.
Opsi --hint akan menyarankan penggantian untuk angka ajaib berdasarkan konstanta codebase Anda.
Opsi --ignore-funcs akan mengecualikan daftar fungsi yang dipisahkan koma dari analisis kode, saat menggunakan ekstensi "argumen". Default ke intval , floatval , strval .
Opsi --ignore-numbers akan mengecualikan daftar nomor yang dipisahkan koma dari analisis kode.
Opsi --ignore-strings akan mengecualikan string dari analisis kode, saat menggunakan opsi "string".
Opsi --include-numeric-string memaksa string numerik seperti "1234" juga diperlakukan sebagai angka.
Opsi --progress akan menampilkan bilah kemajuan.
Opsi --strings akan mencakup string pencarian literal dalam analisis kode.
Opsi --suffixes akan mengonfigurasi daftar koma yang terpisah dari ekstensi nama file kode sumber yang valid.
Opsi --whitelist hanya akan memproses file yang tercantum dalam file yang ditentukan. Ini berguna untuk analisis tambahan.
Opsi --xml-output akan menghasilkan laporan dalam format XML ke jalur yang ditentukan oleh opsi. Secara default itu menganalisis kondisi, pernyataan pengembalian, dan saklar kasus.
round ( $ number , 4 ); $ array = [ 200 , 201 ]; $ var = 10 ; function foo( $ default = 3 ); $ bar = $ foo * 20 ; private $ bar = 10 ; return 5 ; $ var < 7 ;case 3 ;Jika ekstensi dimulai dengan minus, itu berarti bahwa ini akan dihapus dari analisis kode. Saya akan merekomendasikan untuk membersihkan kode Anda dengan menggunakan ekstensi default sebelum menggunakan ekstensi ini.
Terkadang angka ajaib diperlukan. Misalnya menerapkan rumus matematika yang diketahui, secara default intval , floatval dan strval menandai angka sebagai bukan sihir.
misalnya
$percent = $number / 100;
akan menunjukkan 100 sebagai angka ajaib
$percent = $number / intval(100);
akan menandai 100 sebagai bukan sihir.
Silakan lihat Contributing.md untuk informasi lebih lanjut.
Lisensi MIT (MIT). Silakan lihat lisensi untuk informasi lebih lanjut.