PHPコードにファイルが必要です。このrequireは、コードに2回存在します。
require 'test.php';
echo $result;
require 'test.php';
まったく同じファイルで2番目のrequireを実行する前に、最初のrequireセットのすべての変数をクリアする方法はありますか?
PHPコードにファイルが必要です。このrequireは、コードに2回存在します。
require 'test.php';
echo $result;
require 'test.php';
まったく同じファイルで2番目のrequireを実行する前に、最初のrequireセットのすべての変数をクリアする方法はありますか?
requireの最初にすべての変数を宣言すると、次のようになります。
$var = false;
$var2 = 0;
$var3 = '';
// etc...
ファイルを再度要求する以外に何もする必要はありません。変数は、これらの宣言によって自動的に初期状態にリセットされます。
そうは言っても、あなたがやろうとしていることは、別のアプローチを求めています。使用方法に応じて、その機能を関数またはクラスにカプセル化します。基本的に、コードベース全体で繰り返すコードがある場合は、それをモジュール化する必要があり、その内部機能にのみ必要な変数でグローバルスコープを汚染しないようにする必要があります。
require
グローバル変数を使用しない場合は、を関数でラップできます。その場合、作成するすべての変数は関数スコープに制限されます。
function includeFile() {
require 'test.php';
echo $result;
}
includeFile();
includeFile();
ただし、コメントで提案されているように、クラスを作成する方がはるかに優れています。
できることは2つあります。 unset()
それらの変数をすべて削除します。それはあなたの質問に答えます。
あなたがすべきことは、OOPとクラスを調べることです。クラスを作成してから、そのクラスのインスタンスを作成します。その後、新しいクラスを作成し、完全に異なる値とデータを使用して、最終的には何度も繰り返す必要をなくすことができunset()
ますrequire
。
私はこのコードをテストしませんでした!
ポイントは、インクルード前に定義済み変数のリストを取得し、ファイルをインクルードし、インクルード後に定義済み変数のリストを取得し、差を計算し、その差に基づいてグローバル変数を設定解除し、ファイルをインクルードすることです。
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';
意味がありますか?