まず、ティック機能の登録とキャンセルの基本的な使用法を確認しましょう。
<?php
declare(ticks=1);
function tickHandler() {
echo "Tick handler called.\n";
}
// 登録するtick関数
register_tick_function('tickHandler');
// コード実行がトリガーされますtick関数调用
for ($i = 0; $i < 3; $i++) {
echo "Loop iteration $i\n";
}
// ログアウトtick関数
unregister_tick_function('tickHandler');
?>
上記の例では、各ステートメントが実行された後にティルハンドラーが呼び出されます。 ungister_tick_functionを呼び出すときに渡された関数名は、登録時と同じでなければなりません。
PHP自体は、現在登録されているティック機能のリストを直接取得するためのAPIを提供しません。したがって、開発者は、統一ログアウトを容易にするために、登録されたティック機能のリストを維持する必要があります。
例:
<?php
declare(ticks=1);
$registeredTickFunctions = [];
function registerTickFunctionWrapper($func) {
global $registeredTickFunctions;
register_tick_function($func);
$registeredTickFunctions[] = $func;
}
function unregisterAllTickFunctions() {
global $registeredTickFunctions;
foreach ($registeredTickFunctions as $func) {
unregister_tick_function($func);
}
$registeredTickFunctions = [];
}
// 示例関数
function tickOne() {
echo "tickOne called\n";
}
function tickTwo() {
echo "tickTwo called\n";
}
// 登録するtick関数
registerTickFunctionWrapper('tickOne');
registerTickFunctionWrapper('tickTwo');
// コード実行がトリガーされますtick関数调用
echo "Running ticks...\n";
// ログアウト所有tick関数
unregisterAllTickFunctions();
?>
$ RegisterEdTickFunctionsアレイを維持することにより、すべての機能をログアウトできるようにすることができます。
匿名関数または閉鎖を使用してティック関数を登録する場合、ログアウトするときに同じクロージャーへの参照を保持する必要があります。そうしないと、ログアウトできません。
例:
<?php
declare(ticks=1);
$closure = function() {
echo "Anonymous tick function called\n";
};
register_tick_function($closure);
// 尝试ログアウト,同じ閉鎖変数を使用する必要があります
unregister_tick_function($closure);
?>
新しい匿名関数を直接渡さないでください、ログアウトは失敗します。
Unregister_tick_function自体には返品値がなく、ログアウトが成功したかどうかを直接検出することは不可能です。間接的に確認できます。
ログアウトを実行した後、ティックをトリガーするコードセグメントを実行して、コールバックがまだ呼び出されているかどうかを観察します。
状態変数を維持することにより、ティックコールバックで関数を実行する必要があるかどうかを検出します。
<?php
declare(ticks=1);
$registeredTickFunctions = [];
function registerTickFunctionWrapper($func) {
global $registeredTickFunctions;
register_tick_function($func);
$registeredTickFunctions[] = $func;
}
function unregisterAllTickFunctions() {
global $registeredTickFunctions;
foreach ($registeredTickFunctions as $func) {
unregister_tick_function($func);
}
$registeredTickFunctions = [];
}
function tickHandlerA() {
echo "tickHandlerA triggered\n";
}
function tickHandlerB() {
echo "tickHandlerB triggered\n";
}
registerTickFunctionWrapper('tickHandlerA');
registerTickFunctionWrapper('tickHandlerB');
echo "Before unregister:\n";
for ($i = 0; $i < 2; $i++) {
echo "Iteration $i\n";
}
unregisterAllTickFunctions();
echo "After unregister:\n";
for ($i = 0; $i < 2; $i++) {
echo "Iteration $i\n";
}
?>
ログアウトの前後にティック機能コールを出力に明確に見ることができ、ログアウトが成功するようにします。
PHPには、登録されたティック機能を取得するための組み込みインターフェイスがなく、単独で管理する必要があります。
登録された関数リストの統一されたメンテナンスは、統一されたキャンセルを助長します。
ログアウトを容易にするために匿名関数を使用する場合は、参照を保持する必要があります。
コードテストをトリガーして、ログアウト効果を確認します。
これらのヒントにより、 Ungister_tick_functionがすべてのダニ機能を正常にキャンセルできるようになります。
上記のコンテンツは、ティックコールバックをより適切に管理し、プログラムの動作に影響を与える残留チック機能を回避するのに役立ちます。
<?php
declare(ticks=1);
$registeredTickFunctions = [];
function registerTickFunctionWrapper($func) {
global $registeredTickFunctions;
register_tick_function($func);
$registeredTickFunctions[] = $func;
}
function unregisterAllTickFunctions() {
global $registeredTickFunctions;
foreach ($registeredTickFunctions as $func) {
unregister_tick_function($func);
}
$registeredTickFunctions = [];
}
function tickHandler() {
echo "Tick function called.\n";
}
// 登録するtick関数
registerTickFunctionWrapper('tickHandler');
echo "Before unregistering:\n";
for ($i = 0; $i < 3; $i++) {
echo "Loop iteration $i\n";
}
// ログアウト所有tick関数
unregisterAllTickFunctions();
echo "After unregistering:\n";
for ($i = 0; $i < 3; $i++) {
echo "Loop iteration $i\n";
}
?>