PHPで定義された名前空間のリストを取得することは可能ですか?
ファイル1に名前空間ns_1があり、ファイル2に名前空間ns_2がある場合、ファイル1とファイル2がファイル3に含まれていると、名前空間ns_1とns_2がロードされたことを知る方法はありません。
唯一の方法は「class_exists」関数を使用することであり、特定の名前空間を持つクラスのリストは「get_declared_classes」を使用して取得できます。簡単に言えば、取得されたこのデータを使用して、宣言されたすべてのクラス名が与えられた場合に一致する名前空間を見つけることができます-
function namespaceExists($namespace) { $namespace .= "\\"; foreach(get_declared_classes() as $name) if(strpos($name, $namespace) === 0) return true; return false; }
----または---
例
<?php namespace FirstNamespace; class new_class {} namespace SecondNamespace; class new_class {} namespace ThirdNamespace\FirstSubNamespace; class new_class {} namespace ThirdNamespace\SecondSubNamespace; class new_class {} namespace SecondNamespace\FirstSubNamespace; class new_class {} $namespaces=array(); foreach(get_declared_classes() as $name) { if(preg_match_all("@[^\\\]+(?=\\\)@iU", $name, $matches)) { $matches = $matches[0]; $parent =&$namespaces; while(count($matches)) { $match = array_shift($matches); if(!isset($parent[$match]) && count($matches)) $parent[$match] = array(); $parent =&$parent[$match]; } } } print_r($namespaces);
出力
これにより、次の出力が生成されます-
Array ( [FirstNamespace] => [SecondNamespace] => Array ( [FirstSubNamespace] => ) [ThirdNamespace] => Array ( [FirstSubNamespace] => [SecondSubNamespace] => ) )
さまざまな名前空間が作成され(FirstNamespace、SecondNamespace ..)、空のクラスが宣言されます(new_class)。名前空間の配列が作成され、foreachループが宣言されたクラスを実行します。正規表現の一致が行われ、その特定の環境で定義されている名前空間が表示されます。
-
PHPのdefined()関数
PHPのdefined()関数は、定数が存在するかどうかをチェックします。 構文 defined(name) パラメータ 名前 −定数の名前。 戻る defined()関数は、定数が存在する場合はtrueを返し、そうでない場合はfalseを返します。 例 以下は、定数が存在するかどうかを確認する例です。 <?php define("myConstant","This is it!"); echo defined("myConstant"); ?> 出力 以
-
PHPのlist()関数
list()関数は、変数を配列であるかのように割り当てます。割り当てられた配列を返します。 構文 list(variable1, variable2, variable 3, ...) パラメータ 変数1 −最初の変数 変数2 −より多くの変数 variable3 −より多くの変数 戻る list()関数は、割り当てられた配列を返します。 例 以下は例です- <?php $arr = array("David","Jack"); list($one, $two) = $arr; echo "Selected