1

PHPコードにファイルが必要です。このrequireは、コードに2回存在します。

require 'test.php';

echo $result;

require 'test.php';

まったく同じファイルで2番目のrequireを実行する前に、最初のrequireセットのすべての変数をクリアする方法はありますか?

4

4 に答える 4

1

requireの最初にすべての変数を宣言すると、次のようになります。

$var = false;
$var2 = 0;
$var3 = '';
// etc...

ファイルを再度要求する以外に何もする必要はありません。変数は、これらの宣言によって自動的に初期状態にリセットされます。

そうは言っても、あなたがやろうとしていることは、別のアプローチを求めています。使用方法に応じて、その機能を関数またはクラスにカプセル化します。基本的に、コードベース全体で繰り返すコードがある場合は、それをモジュール化する必要があり、その内部機能にのみ必要な変数でグローバルスコープを汚染しないようにする必要があります。

于 2012-09-11T16:13:13.007 に答える
1

requireグローバル変数を使用しない場合は、を関数でラップできます。その場合、作成するすべての変数は関数スコープに制限されます。

function includeFile() {
    require 'test.php';
    echo $result;
}

includeFile();

includeFile();

ただし、コメントで提案されているように、クラスを作成する方がはるかに優れています。

于 2012-09-11T16:13:27.470 に答える
0

できることは2つあります。 unset()それらの変数をすべて削除します。それはあなたの質問に答えます。

あなたがすべきことは、OOPとクラスを調べることです。クラスを作成してから、そのクラスのインスタンスを作成します。その後、新しいクラスを作成し、完全に異なる値とデータを使用して、最終的には何度も繰り返す必要をなくすことができunset()ますrequire

于 2012-09-11T16:15:04.847 に答える
0

私はこのコードをテストしませんでした!

ポイントは、インクルード前に定義済み変数のリストを取得し、ファイルをインクルードし、インクルード後に定義済み変数のリストを取得し、差を計算し、その差に基づいてグローバル変数を設定解除し、ファイルをインクルードすることです。

get_defined_varsおよびの手動エントリを参照してくださいunset

<?php

$old_vars = get_defined_vars();

require 'test.php';

$new_vars = get_defined_vars();

echo $result;

$diff_vars = array_diff_key($old_vars, $new_vars);
while ($var = key($diff_vars)) {
    unset($GLOBALS[$var]);
    next($diff_vars);
}
unset($old_vars, $new_vars, $diff_vars);

require 'test.php';

意味がありますか?

于 2012-09-11T16:17:49.480 に答える