PHPプロジェクト開発では、定義を定義するために定義またはconstを使用することがよくあります。プロジェクトが拡大し続けるにつれて、定数の数も劇的に増加します。時間が経つにつれて、一部の定数は忘れられ、コードによっても言及されなくなります。これらの未使用の定数は、メンテナンスコストを増加させ、コードの読みやすさと保守性を低下させます。コードの品質を改善するために、 get_defined_constants関数と静的分析方法を組み合わせて使用して、未使用の定数を識別およびクリーニングできます。
get_defined_constantsは、PHPの組み込み関数の1つであり、現在のスクリプトのすべての定義された定数(ユーザー定義定数とPHP内部定数を含む)を返すために使用されます。この関数はブールパラメーターを受け入れることができ、パラメーターが真の場合、分類によってグループ化された多次元配列を返します。それ以外の場合は、フラット配列を返します。
例:
print_r(get_defined_constants(true));
get_defined_constantsは、定数が使用されているかどうかを直接伝えません。しかし、この目標を間接的に達成するために、次の2つのステップを組み合わせることができます。
すべてのユーザー定義の定数名を取得します。
プロジェクトコードを繰り返し、これらの定数が参照されるかどうかを確認します。
参照されていない定数を「未使用」としてマークします。
小規模で中規模のプロジェクトを維持していると仮定して、簡単な実装のアイデアを次に示します。
$allConstants = get_defined_constants(true);
$userConstants = isset($allConstants['user']) ? $allConstants['user'] : [];
$projectDir = __DIR__ . '/src'; // プロジェクトソースコードディレクトリ
$usedConstants = [];
$files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($projectDir));
foreach ($files as $file) {
if ($file->isFile() && pathinfo($file, PATHINFO_EXTENSION) === 'php') {
$content = file_get_contents($file->getPathname());
foreach ($userConstants as $name => $value) {
// 簡単な文字列検索,通常のマッチング精度を使用することもできます
if (strpos($content, $name) !== false) {
$usedConstants[$name] = true;
}
}
}
}
$unusedConstants = array_diff_key($userConstants, $usedConstants);
echo "未使用の定数のリスト:\n";
print_r(array_keys($unusedConstants));
大規模なプロジェクトでは、変数名が一定の名前に似ている場合の干渉など、誤判断を避けるために正規表現を使用することをお勧めします。
複数の検証のために、コード静的分析ツール(phpstan、詩編など)と協力することをお勧めします。
定数を削除する前に、動的に参照されている定数が誤って削除されないように、開発環境で繰り返しテストすることをお勧めします。
プロジェクトが次の定数を定義していると仮定します。
define('API_URL', 'https://m66.net/api/');
define('DEBUG_MODE', true);
define('UNUSED_CONST', 12345);
スクリプト分析の後、 Unsused_constがプロジェクトで参照されていないことがわかっているため、プロジェクトコードの整然性を改善するためにコードから削除することを検討できます。
PHPには未使用の定数を直接見つけるための組み込み機能はありませんが、 get_defined_constants関数と単純なコードスキャンロジックを通じてこれを達成できます。定数の合理的な管理は、コードの読みやすさと保守性を改善するのに役立ち、プロジェクトの成熟度と標準化も反映しています。