次の設定をしている場合、PHP5は__destruct()関数を呼び出していないことがわかりました。
クラステスト{ __destruct() {{ エコー'hehe'; 出口; } } header('場所:http://test.com/'); 出口;
destruct関数を呼び出すことはありません
次の設定をしている場合、PHP5は__destruct()関数を呼び出していないことがわかりました。
クラステスト{ __destruct() {{ エコー'hehe'; 出口; } } header('場所:http://test.com/'); 出口;
destruct関数を呼び出すことはありません
デストラクタは次のように呼ばれます。
ヘッダーを使用してリダイレクトしても、デストラクタの呼び出しが妨げられることはありません。
また、デストラクタはPHPスクリプトの最後に呼び出されることに注意してください。ただし、「リダイレクト」というヘッダーがすでに生成されているため、リダイレクトが妨げられることはありません。
たとえば、このコードでは:
class Test {
public function __destruct() {
echo 'hehe';
file_put_contents('/tmp/test-desctructor.txt', "glop\n");
exit;
}
}
$a = new Test();
header('Location: http://example.com/');
exit;
(いくつかの間違いを修正し、クラスの実際のインスタンスを追加したことに注意してください)
出力に「」は表示されませんが、ファイルが作成されているhehe
ことがわかります。/tmp/test-desctructor.txt
$ cat /tmp/test-desctructor.txt
glop
出力に「」を付けたい場合は、リダイレクトを削除する必要がありますhehe
。
デストラクタは、ヘッダーが生成された後に呼び出されます。デストラクタからexitを呼び出しても、そのヘッダーがすでに生成されているという事実は変わりません。
ああ、これがマニュアルからのメモです (引用-ページの下部にあります):
注:スクリプトのシャットダウン中に呼び出されたデストラクタには、HTTPヘッダーがすでに送信されています。
これが、""文字列が表示されない理由ですhehe
。デストラクタは;と呼ばれます。画面に表示されないだけです;-)
そのため、私の例ではファイルを使用しました、ところで;-)