PHP Projenizde Kullanılmayan Fonksiyonları Nasıl Bulursunuz

Bir geliştirici olarak, temiz ve verimli bir kod tabanını sürdürmek, herhangi bir projenin uzun vadeli sağlığı için kritik öneme sahiptir. Kodunuzu şişiren ve teknik borca katkıda bulunan yaygın bir sorun, kullanılmayan fonksiyonlar içermektir. Bu blog yazısında, PHP projelerinizde bu kullanılmayan fonksiyonları etkili bir şekilde nasıl tanımlayabileceğinizi, hem yerleşik PHP özelliklerini hem de özel bir betiği kullanarak keşfedeceğiz.

Kullanılmayan Fonksiyonları Tanımlamanın Önemi

Kullanılmayan fonksiyonlar şunlara yol açabilir:

  • Israf Ettiğiniz Kaynaklar: Ekstra kod yer kaplar ve uygulamanızı yavaşlatabilir.
  • Karmaşıklık: Daha fazla kod, daha fazla karmaşıklık demektir; bu da projenizi daha zor navigasyon ve bakım yapılır hale getirir.
  • Güvenlik Riskleri: Kullanılmayan kod, henüz keşfedilmemiş güvenlik açıklarına neden olabilir.

Bu fonksiyonları bulmak ve kaldırmak, optimal kod yönetimi için şarttır.

Kullanılmayan Fonksiyonları Bulmak İçin PHP Özelliklerini Kullanma

PHP, kod tabanınızı analiz etmek için yararlanabileceğiniz bazı yerleşik özellikler sunar. İki dikkate değer özellik şunlardır:

  • Yansıma (Reflection): Sınıflar, metodlar ve fonksiyonlar üzerinde yansıma yaparak kullanımını anlamanızı sağlar.
  • token_get_all() ile Token’laşma: Bu fonksiyon, PHP kodunu token’lara ayırarak, kodun yapısını tanımlamanızı kolaylaştırır.

Ancak, sadece bu özelliklere dayanmak tam bir resim sağlamayabilir; burada özel betikler devreye girebilir.

Hızlı ve Kolay Çözüm: Özel PHP Betiği

Son araştırmalar ve topluluk geri bildirimi doğrultusunda, PHP projenizde kullanılmayan fonksiyonları bulmanıza yardımcı olacak özel bir betik aşağıda verilmiştir. Bu betik, proje dizininizi tarar, fonksiyon tanımlarını ve referanslarını tanımlar ve sonuçları okunabilir bir formatta sunar.

Adım 1: Ortamınızı Hazırlama

  • PHP ortamınızın kurulu olduğundan emin olun.
  • Proje dizininizin yolunun doğru olduğundan emin olun.
  • Aşağıdaki betiği yeni bir .php dosyasına kopyalayın.

Adım 2: PHP Betiği

<?php
$functions = array();
$path = "/path/to/my/php/project"; // Bu yolu projenizin dizinine göre güncelleyin.
define_dir($path, $functions);
reference_dir($path, $functions);
echo "<table>";
echo "<tr><th>İsim</th><th>Tanımlı</th><th>Referans</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]; // Fonksiyon adını al
            if (is_array($token) && $token[0] == T_STRING) {
                $functions[$token[1]][0][] = array($path, $token[2]); // Fonksiyon tanımını sakla
            }
        }
    }
}

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] == "(") { // Fonksiyon çağrısını kontrol et
                $functions[$token[1]][1][] = array($path, $token[2]); // Fonksiyon referansını sakla
            }
        }
    }
}
?>

Adım 3: Betiği Çalıştırma

  1. Betikteki $path değişkenini, PHP proje dizininizi gösterecek şekilde güncelleyin.
  2. Betiği komut satırınızdan veya web sunucunuzdan çalıştırın.
  3. Çıktı, tüm fonksiyonları, tanımlandıkları sayıyı ve referans sayısını gösteren bir HTML tablosu olacaktır.

Sonuç

Bu özel betik, PHP projenizde kullanılmayan fonksiyonları izlemek için verimli bir yol sunar. PHP’nin Yansıma gibi yerleşik özellikleri ve token_get_all() güçlüdür, ancak özel bir betik kullanmak, kullanılmayan fonksiyonları tanımlama ve yönetme sürecini kolaylaştırabilir. En iyi uygulama olarak, kod tabanınızı temiz ve verimli tutmak için bu betiği periyodik olarak çalıştırmayı dikkate alın.

Projenizi düzenli tutarak, yalnızca performansını artırmakla kalmaz, aynı zamanda uzun vadede bakım ve işbirliğini de kolaylaştırırsınız.