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
- Betikteki
$path
değişkenini, PHP proje dizininizi gösterecek şekilde güncelleyin. - Betiği komut satırınızdan veya web sunucunuzdan çalıştırın.
- Çı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.