Cómo encontrar funciones no utilizadas
en tu proyecto PHP
Como desarrollador, mantener una base de código limpia y eficiente es crucial para la salud a largo plazo de cualquier proyecto. Un problema común que puede inflar tu código y contribuir a la deuda técnica es tener funciones no utilizadas
. En esta publicación del blog, exploraremos cómo puedes identificar de manera efectiva estas funciones no utilizadas en tus proyectos PHP, utilizando tanto características integradas de PHP como un script personalizado.
La importancia de identificar funciones no utilizadas
Las funciones no utilizadas pueden llevar a:
- Recursos desperdiciados: Código extra ocupa espacio y puede ralentizar tu aplicación.
- Complejidad: Más código significa más complejidad, haciendo que tu proyecto sea más difícil de navegar y mantener.
- Riesgos de seguridad: El código no utilizado puede inadvertidamente exponer vulnerabilidades que aún no se han descubierto.
Encontrar y eliminar estas funciones es esencial para una gestión óptima del código.
Uso de características de PHP para localizar funciones no utilizadas
PHP ofrece algunas características integradas que puedes aprovechar para analizar tu base de código. Dos características notables incluyen:
- Reflexión: Proporciona la capacidad de reflexionar sobre clases, métodos y funciones para comprender su uso.
- Tokenización con
token_get_all()
: Esta función te permite analizar código PHP en tokens, facilitando la identificación de la estructura del código.
Sin embargo, depender únicamente de estas características puede no darte una imagen completa, es aquí donde el scripting personalizado puede ser útil.
Una solución rápida y sucia: Script PHP personalizado
Basado en investigaciones recientes y comentarios de la comunidad, aquí hay un script personalizado que te ayudará a encontrar funciones no utilizadas en tu proyecto PHP. Este script escanea el directorio de tu proyecto, identifica definiciones de funciones y sus referencias, y presenta los resultados en un formato legible.
Paso 1: Configuración de tu entorno
- Asegúrate de tener un entorno PHP configurado.
- Asegúrate de que la ruta de tu directorio de proyecto sea precisa.
- Copia el siguiente script en un nuevo archivo
.php
.
Paso 2: El script PHP
<?php
$functions = array();
$path = "/ruta/a/mi/proyecto/php"; // Actualiza esta ruta a tu directorio de proyecto.
define_dir($path, $functions);
reference_dir($path, $functions);
echo "<table>";
echo "<tr><th>Nombre</th><th>Definido</th><th>Referencia</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]; // Obtener el nombre de la función a continuación
if (is_array($token) && $token[0] == T_STRING) {
$functions[$token[1]][0][] = array($path, $token[2]); // Almacenar la definición de la función
}
}
}
}
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] == "(") { // Verificar la llamada a la función
$functions[$token[1]][1][] = array($path, $token[2]); // Almacenar la referencia de la función
}
}
}
}
?>
Paso 3: Ejecutando el script
- Actualiza la variable
$path
en el script para que apunte al directorio de tu proyecto PHP. - Ejecuta el script a través de tu línea de comandos o servidor web.
- La salida será una tabla HTML que muestra todas las funciones, cuántas veces están definidas y cuántas veces son referenciadas.
Conclusión
Este script personalizado te brinda una forma eficiente de rastrear funciones no utilizadas en tu proyecto PHP. Si bien las características integradas de PHP como Reflexión y token_get_all()
son poderosas, tener un script a medida puede agilizar el proceso de identificación y gestión de funciones no utilizadas. Como buena práctica, considera ejecutar este script periódicamente para mantener limpia y eficiente tu base de código.
Al mantener tu proyecto ordenado, no solo mejoras su rendimiento, sino que también facilitas un mantenimiento y colaboración más sencillo a largo plazo.