ホームページ  >  記事  >  バックエンド開発  >  関数のインクルードをグローバル インクルードにする方法はありますか?

関数のインクルードをグローバル インクルードにする方法はありますか?

WBOY
WBOYオリジナル
2016-06-23 14:06:01882ブラウズ

ファイルを関数にインクルードした後は、ファイル内のすべての変数が関数内でローカル変数になるため、あらかじめ関数内でグローバルに宣言しておくこともできますが、変数の数が多くなると面倒なので、これらの変数が必要になります。関数内でグローバル変数に変換するには、$GLOBALS を通じて変換する必要があります。 js のような 3f1c4e4b6b16bbbd69b2ee476dc4f83a タグを使用してグローバル変数を動的にロードする方法はありますか? !

例:

A.php<?phpinclude b.php;include c.php;....function fn($name) {   include "{$name}.php";}fn('d');

最終的には:
A.php<?phpinclude b.php;include c.php;include d.php;...


しかし、それは不可能だと思います。 なぜなら、php は js と同様に逐次実行プログラムですが、js はスクリプトを動的にロードするために HTMLDom メカニズムに依存することができ、php 環境ではPHP がインクルード メカニズムを再構築し、関数インクルード ファイルの後のすべての変数を参照またはコピーすることによってグローバル変数 $GLOBALS に自動的に追加しない限り、これは行われません。

そうでしょう? !


ディスカッションへの返信(解決策)

1. php と js の動作メカニズムは異なります
2. js と同様に、3f1c4e4b6b16bbbd69b2ee476dc4f83a タグを使用して動的に実行すると言いました。ただし、このスクリプト タグはグローバル プログラム セグメントを表します。関数にはありません
3. 要求は奇妙ですが、達成できます。もちろん、$GLOBALS チャンネルを使用する必要があります

function fn($_Name) {  include "{$_Name}.php";  foreach(get_defined_vars() as $_K=>$_V) {    if(! in_array($_K, array('_Name', '_K', '_V')) $GLOBALS[$_K] = $_V;     }}

この投稿は xuzuning によって最終編集されました: 2013-03-15 08:46:41
1. php と js の動作メカニズムを比較しないでください。この 2 つは異なります
2. js のようなグローバル変数を動的にロードするために 3f1c4e4b6b16bbbd69b2ee476dc4f83a タグを使用すると言いましたが、この script タグはグローバル プログラム セグメントを表します。関数にはありません
3. 要求は奇妙ですが、達成できます。もちろん、それでも $GLOBA を使用する必要があります...

get_define_vars() はオブジェクト (is_object() を使用して決定することはできません) を自動的に検出し、それを文字列 If __toString に変換しようとするため、これはまだ少し不適切です。 () がクラスに定義されていない場合、致命的なエラーがスローされます。また、ロードされたファイルがすでに前の変数をグローバル変数として扱っている場合は、後で変換しても意味がありません。この投稿は xuzuning によって最終編集されました: 2013-03-15 08:46:41

1. PHP と JS を比較しないでください。ただし、このスクリプト タグはグローバル プログラム セグメントを表します。関数にはありません

3. 要求は奇妙ですが、達成できます。もちろん、$GLOBA を使用する必要があります...

このニーズはありますが、その長所を最大限に活用し、弱点を避けるために、関数はファイルが存在するかどうかを判断するだけで済みます。存在する場合は、それを以前に定義したファイルに渡します。グローバル変数を作成し、それを関数内ではなく関数の外に含めます。


私は学びに来ました

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。