Cara Mencari Fungsi yang Tidak Digunakan dalam Proyek PHP Anda

Sebagai pengembang, menjaga basis kode yang bersih dan efisien sangat penting untuk kesehatan jangka panjang dari proyek apa pun. Salah satu masalah umum yang dapat membesar-besarkan kode Anda dan berkontribusi pada utang teknis adalah memiliki fungsi yang tidak digunakan. Dalam posting blog ini, kita akan menjelajahi bagaimana Anda dapat secara efektif mengidentifikasi fungsi-fungsi yang tidak digunakan ini dalam proyek PHP Anda, menggunakan fitur bawaan PHP dan skrip kustom.

Pentingnya Mengidentifikasi Fungsi yang Tidak Digunakan

Fungsi yang tidak digunakan dapat menyebabkan:

  • Sumber Daya yang Terbuang: Kode tambahan mengambil ruang dan dapat memperlambat aplikasi Anda.
  • Kompleksitas: Lebih banyak kode berarti lebih banyak kompleksitas, membuat proyek Anda lebih sulit dinavigasi dan dikelola.
  • Risiko Keamanan: Kode yang tidak digunakan mungkin secara tidak sengaja mengekspos kerentanan yang belum ditemukan.

Menemukan dan menghapus fungsi-fungsi ini sangat penting untuk manajemen kode yang optimal.

Menggunakan Fitur PHP untuk Menemukan Fungsi yang Tidak Digunakan

PHP menawarkan beberapa fitur bawaan yang dapat Anda manfaatkan untuk menganalisis basis kode Anda. Dua fitur notable meliputi:

  • Refleksi: Ini memberikan kemampuan untuk melakukan refleksi terhadap kelas, metode, dan fungsi untuk memahami penggunaannya.
  • Tokenisasi dengan token_get_all(): Fungsi ini memungkinkan Anda untuk mengurai kode PHP menjadi token, sehingga lebih mudah untuk mengidentifikasi struktur kode.

Namun, bergantung sepenuhnya pada fitur-fitur ini mungkin tidak memberikan Anda gambaran yang lengkap, di sinilah scripting kustom dapat membantu.

Solusi Cepat dan Kotor: Skrip PHP Kustom

Berdasarkan penelitian terbaru dan umpan balik komunitas, berikut adalah skrip kustom untuk membantu Anda menemukan fungsi yang tidak digunakan dalam proyek PHP Anda. Skrip ini memindai direktori proyek Anda, mengidentifikasi definisi fungsi dan referensinya, dan menyajikan hasil dalam format yang mudah dibaca.

Langkah 1: Menyiapkan Lingkungan Anda

  • Pastikan Anda memiliki lingkungan PHP yang sudah disiapkan.
  • Pastikan jalur direktori proyek Anda akurat.
  • Salin skrip berikut ke dalam file baru dengan ekstensi .php.

Langkah 2: Skrip PHP

<?php
$functions = array();
$path = "/path/to/my/php/project"; // Perbarui jalur ini ke direktori proyek Anda.
define_dir($path, $functions);
reference_dir($path, $functions);
echo "<table>";
echo "<tr><th>Nama</th><th>Ditentukan</th><th>Dirujuk</th></tr>";
foreach ($functions as $name => $value) {
    echo "<tr><td>" . htmlentities($name) . "</td>";
    echo "<td>" . (isset($value[0]) ? count($value[0]) : "-") . "</td>";
    echo "<td>" . (isset($value[1]) ? count($value[1]) : "-") . "</td></tr>";
}
echo "</table>";

function define_dir($path, &$functions) {
    if ($dir = opendir($path)) {
        while (($file = readdir($dir)) !== false) {
            if (substr($file, 0, 1) == ".") continue;
            if (is_dir($path . "/" . $file)) {
                define_dir($path . "/" . $file, $functions);
            } else {
                if (substr($file, - 4) != ".php") continue;
                define_file($path . "/" . $file, $functions);
            }
        }
    }       
}

function define_file($path, &$functions) {
    $tokens = token_get_all(file_get_contents($path));
    for ($i = 0; $i < count($tokens); $i++) {
        $token = $tokens[$i];
        if (is_array($token) && $token[0] == T_FUNCTION) {
            $i++;
            $token = $tokens[$i + 1]; // Ambil nama fungsi selanjutnya
            if (is_array($token) && $token[0] == T_STRING) {
                $functions[$token[1]][0][] = array($path, $token[2]); // Simpan definisi fungsi
            }
        }
    }
}

function reference_dir($path, &$functions) {
    if ($dir = opendir($path)) {
        while (($file = readdir($dir)) !== false) {
            if (substr($file, 0, 1) == ".") continue;
            if (is_dir($path . "/" . $file)) {
                reference_dir($path . "/" . $file, $functions);
            } else {
                if (substr($file, - 4) != ".php") continue;
                reference_file($path . "/" . $file, $functions);
            }
        }
    }       
}

function reference_file($path, &$functions) {
    $tokens = token_get_all(file_get_contents($path));
    for ($i = 0; $i < count($tokens); $i++) {
        $token = $tokens[$i];
        if (is_array($token) && $token[0] == T_STRING) {
            if ($tokens[$i + 1][0] == "(") { // Periksa panggilan fungsi
                $functions[$token[1]][1][] = array($path, $token[2]); // Simpan referensi fungsi
            }
        }
    }
}
?>

Langkah 3: Menjalankan Skrip

  1. Perbarui variabel $path dalam skrip untuk mengarah ke direktori proyek PHP Anda.
  2. Jalankan skrip melalui command line atau server web Anda.
  3. Outputnya akan menjadi tabel HTML yang menampilkan semua fungsi, seberapa sering mereka didefinisikan, dan seberapa sering mereka dirujuk.

Kesimpulan

Skrip kustom ini memberi Anda cara yang efisien untuk melacak fungsi yang tidak digunakan dalam proyek PHP Anda. Meskipun fitur bawaan PHP seperti Refleksi dan token_get_all() sangat kuat, memiliki skrip yang disesuaikan dapat memperlancar proses mengidentifikasi dan mengelola fungsi yang tidak digunakan. Sebagai praktik terbaik, pertimbangkan untuk menjalankan skrip ini secara berkala untuk menjaga basis kode Anda tetap bersih dan efisien.

Dengan menjaga proyek Anda tetap rapi, Anda tidak hanya meningkatkan performanya tetapi juga memudahkan pemeliharaan dan kolaborasi dalam jangka panjang.