Bagaimana saya dapat menemukan fungsi yang tidak terpakai dalam proyek PHP
Bagaimana saya dapat menemukan apapun yang tidak terpakai fungsi dalam PHP project?
Ada fitur atau Api yang dibangun ke PHP yang akan memungkinkan saya untuk menganalisa saya codebase - misalnya Refleksi, token_get_all()
?
Ini adalah Api ini kaya fitur yang cukup bagi saya untuk tidak harus bergantung pada alat pihak ketiga untuk melakukan jenis analisis?
58
9
Anda dapat mencoba Sebastian Bergmann's Kode Mati Detektor:
Sumber: https://github.com/sebastianbergmann/phpdcd
Perhatikan bahwa itu's statis code analyzer, sehingga dapat memberikan hasil positif palsu bagi metode-metode yang hanya disebut secara dinamis, misalnya ia tidak dapat mendeteksi
$foo = 'fn'; $foo();
Anda dapat menginstalnya melalui PEAR:
Setelah itu anda dapat menggunakan opsi berikut:
Terima kasih Greg dan Dave untuk umpan balik. Itu't cukup apa yang saya cari, tapi saya memutuskan untuk menempatkan sedikit waktu untuk meneliti hal ini dan datang dengan cepat dan kotor solusi:
I'mungkin akan menghabiskan lebih banyak waktu di atasnya sehingga aku dapat dengan cepat menemukan file dan nomor baris dari definisi fungsi dan referensi, ini informasi yang dikumpulkan, hanya saja tidak ditampilkan.
Ini sedikit bash scripting mungkin bisa membantu:
Ini pada dasarnya secara rekursif greps direktori saat ini untuk definisi fungsi, melewati rumah untuk awk, yang membentuk sebuah perintah untuk melakukan hal-hal berikut:
Perintah ini kemudian dikirim untuk eksekusi bash dan output grepped untuk 0, yang akan menunjukkan 0 panggilan ke fungsi.
Perhatikan bahwa hal ini akan tidak memecahkan masalah calebbrown mengutip di atas, jadi mungkin ada beberapa positif palsu dalam output.
PENGGUNAAN: find_unused_functions.php <root_directory>
CATATAN: Ini adalah 'cepat-n-kotor' pendekatan untuk masalah ini. Script ini hanya melakukan leksikal melewati file, dan tidak menghormati situasi di mana modul yang berbeda menentukan identik bernama fungsi atau metode. Jika anda menggunakan IDE untuk pengembangan PHP, itu mungkin menawarkan solusi yang lebih komprehensif.
Membutuhkan PHP 5
Untuk menghemat copy dan paste, langsung download, dan setiap versi baru, yang tersedia.
Jika saya ingat dengan benar, anda dapat menggunakan phpCallGraph untuk melakukan itu. It'akan menghasilkan grafik yang bagus (gambar) untuk anda dengan semua metode yang terlibat. Jika metode ini tidak terhubung ke yang lain, yang's pertanda baik bahwa metode adalah yatim piatu.
Berikut ini's contoh: classGallerySystem.png
Metode
getKeywordSetOfCategories()
adalah yatim piatu.Hanya dengan cara itu, anda don't harus mengambil gambar -- phpCallGraph juga dapat generate file teks, atau array PHP, dll..
Karena fungsi PHP/metode yang dapat dipanggil secara dinamis, tidak ada cara program untuk mengetahui dengan pasti jika sebuah fungsi tidak akan pernah bisa disebut.
Satu-satunya cara tertentu melalui analisis manual.
2019+ Update
Aku punya inspied oleh Andrey's answer dan ternyata ini menjadi sebuah standar pengkodean mengendus.
Deteksi sangat sederhana namun kuat:
fungsi publik someMethod()
${apa}->someMethod()
Itu membantu saya untuk menghapus atas 20+ metode saya akan memiliki untuk mempertahankan dan tes.
3 Langkah untuk Menemukan mereka
Menginstal ECS:
Set up
ecs.yaml
config:Jalankan perintah:
Seperti diberitakan metode dan menghapus orang-orang yang anda don't baik-baik saja berguna 👍
Anda dapat membaca lebih lanjut tentang hal itu di sini: Menghapus Mati Metode Umum dari Kode
afaik tidak ada cara. Untuk mengetahui fungsi "adalah milik siapa" anda akan perlu untuk melaksanakan sistem (runtime ikatan fungsi lookup).
Tapi Refactoring yang sesuai didasarkan pada analisis kode statis. Aku benar-benar suka dinamis mengetik bahasa, tetapi dalam pandangan saya mereka sulit untuk skala. Kurangnya aman refactorings besar codebases dan dinamis mengetik bahasa adalah kelemahan utama untuk pemeliharaan dan penanganan evolusi perangkat lunak.
phpxref akan mengidentifikasi mana fungsi yang dipanggil dari yang akan memfasilitasi analisis - tapi ada's masih sejumlah upaya manual yang terlibat.