現在の位置: ホーム> 最新記事一覧> 新しく定義された定数を動的に検出します(比較前後)

新しく定義された定数を動的に検出します(比較前後)

M66 2025-05-18

PHPプログラミングでは、定数は実行中に変更できない識別子であり、しばしば構成パラメーターまたは固定値の宣言に使用されます。大規模なアプリケーションやデバッグサードパーティライブラリを開発している場合、特定のコードで定義または変更されている定数を検出する必要がある場合があります。この時点で、 get_defined_constants()関数は役立ちます。

get_defined_constants()は、現在定義されているすべての定数とそれらの対応する値を返すPHPビルトイン関数です。コードが実行された後、比較の前後に関数を呼び出すことにより、新しく追加された定数を正確にキャプチャし、これらの定数の値をさらに確認できます。

1。基本的な構文

array get_defined_constants ([ bool $categorize = false ] )
  • $の分類パラメーターがtrueに設定されている場合、返された配列は定数の分類(コア、ユーザー定義など)に従ってグループ化されます。

  • それ以外の場合は、フラットな1次元連想配列を返します。キーは定数の名前で、値は定数の値です。

2。新しく定義された定数を動的に検出します

特定のコードの前後にget_defined_constants()を呼び出して、2つの配列の違いを比較することにより、中間コードに新しい定数を追加できます。

ここに完全な例があります:

 <?php

// 初期一定の状態を記録します
$before = get_defined_constants();

// サードパーティの構成ファイルまたはライブラリの読み込みをシミュレートします
include 'http://m66.net/sample-config.php'; // 例 URL

// 荷重後の定数の状態を記録します
$after = get_defined_constants();

// 新しい定数を計算します
$new_constants = array_diff_assoc($after, $before);

// 新しい定数が出力に追加されます
echo "新しい定数は次のとおりです:\n";
foreach ($new_constants as $name => $value) {
    echo "$name => " . var_export($value, true) . "\n";
}

この例では、 array_diff_assoc()を使用して、キー名だけでなくキー値も比較する2つの配列間の違いを比較します。これにより、値が変更された既存の定数ではなく、新しく定義された定数を正確に取得できます。

3。高度な使用:ユーザー定義の定数をフィルターします

ユーザー定義の定数のみを取得する場合は、 get_defined_constants(true)を呼び出すときに分類パラメーターを追加し、そこから「ユーザー」カテゴリの下に定数を抽出できます。例えば:

 $before = get_defined_constants(true)['user'] ?? [];
include 'http://m66.net/sample-config.php';
$after = get_defined_constants(true)['user'] ?? [];

$new_constants = array_diff_assoc($after, $before);

foreach ($new_constants as $name => $value) {
    echo "$name => " . var_export($value, true) . "\n";
}

この方法は、システムのデフォルト定数を除外する必要があるシナリオに特に適しており、ユーザーまたはビジネスロジックの新しい定義のキャプチャに焦点を当てることができます。

IV。アプリケーションシナリオ

  1. デバッグサードパーティライブラリ:ライブラリまたはフレームワークによって導入される定数を分析します。

  2. 構成追跡:複数の構成ファイルで定義された位置の重複または競合する定数。

  3. セキュリティ監査:異常な定数が悪意を持って注入されているかどうかを監視します。

  4. テストと検証:自動テストプロセスの前後のステータスの違いの比較。

5。注意すべきこと

  • 一定の定義を変更できなくなると、繰り返される定義は警告を引き起こします。

  • 競合の名前を避けるために、名前空間プレフィックスを使用することをお勧めします。

  • コアロジックで多数の定数を動的に生成することは避けてください。そうしないと、コードの保守性に影響します。