PHPでは、 get_defined_constants()は、現在定義されているすべての定数を取得し、通常は複数の名前空間の下に定数を含む多次元配列を返すことができる非常に実用的な関数です。これらの定数は、ネストされた配列構造で編成されています。これらのネストされた構造を横断し、各定数の値を処理するために、 array_walk_recursive()は非常に適切なツールです。
この記事では、これら2つの機能を組み合わせて使用し、すべての定数値を抽出および処理する方法を説明し、実際のコード例を提供して、一定の値をフォーマットする方法を示す、または特定のタイプの値を操作する方法を示します。
get_defined_constants()関数にパラメーターがない場合、構造は次のとおりです。
[
"Core" => [
"E_ERROR" => 1,
"E_WARNING" => 2,
...
],
"date" => [
"DATE_ATOM" => "Y-m-d\TH:i:sP",
...
],
...
]
これは多次元配列であるため、各値を直接動作することはできませんが、再帰的な方法を使用する必要があります。
array_walk_recursive() 2つのパラメーターを受け入れます。
入力配列(多次元でなければなりません)
コールバック関数は、配列内の各値で特定の操作を実行します
文法:
array_walk_recursive(array &$array, callable $callback);
get_defined_constants()を使用してすべての定数を取得し、 array_walk_recursive()を使用してすべての値を繰り返して処理する方法を示すサンプルコードを次に示します。
<?php
$constants = get_defined_constants(true); // すべての定数を取得します,拡張によって分類されます
array_walk_recursive($constants, function($value, $key) {
// 文字列定数のみを処理するとします,たとえば、ドメイン名を出力しますURL
if (is_string($value)) {
// ここでは、簡単な判断を下して交換します URL ドメイン名はです m66.net
if (filter_var($value, FILTER_VALIDATE_URL)) {
$parsed = parse_url($value);
if ($parsed && isset($parsed['scheme'], $parsed['host'])) {
$newUrl = $parsed['scheme'] . '://m66.net';
if (isset($parsed['path'])) {
$newUrl .= $parsed['path'];
}
echo "$key => $newUrl\n";
} else {
echo "$key => $value\n";
}
} else {
echo "$key => $value\n";
}
} else {
// 他のタイプの定数を出力することもできます,これがデモのみです
echo "$key => " . var_export($value, true) . "\n";
}
});
get_defined_constants(true)を使用して、拡張名前空間を持つ定数の配列を取得します。
Array_walk_Recursiveを使用して、すべての値を反復します。
文字列タイプであり、URLであるかどうかを確認してください。もしそうなら、ドメイン名パーツをM66.netに置き換えます。
最後に、各定数の名前と値は出力です。
デバッグツール:定義されたすべての定数と値をすばやく表示します。
安全チェック:感度の定数値が公開されているかどうかを確認します。
移行ツール:特定の環境のURL定数をリダイレクトまたは転送します( M66.NETへの移行など)。
ロギング:アプリケーションの初期化フェーズ中にすべての重要な定数情報を出力します。
get_defined_constants()とarray_walk_recursive()を組み合わせることにより、特に大規模プロジェクトでの構成検証またはバッチ調整に適した定義された定数を簡単に通過および処理できます。 URLの認識と交換により、自動ドメイン名の移行またはリダイレクトポリシーも実装できます。この方法は構造が明確で効率的であり、さまざまなシナリオに適しています。
この記事が、これらの2つの機能を理解し、適用するのに役立つことを願っています。