먼저, 진드기 기능 등록 및 취소의 기본 사용법을 검토하겠습니다.
<?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');
?>
위의 예에서는 각 명령문이 실행 된 후 TickHandler가 호출됩니다. unregister_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";
}
?>
로그 아웃 전후에 Tick 함수 호출은 로그 아웃이 성공할 수 있도록 출력에서 명확하게 볼 수 있습니다.
PHP에는 등록 된 진드기 기능을 얻기위한 내장 인터페이스가 없으며 자체적으로 관리해야합니다.
등록 된 기능 목록의 통합 유지 보수는 통합 취소에 도움이됩니다.
익명 기능을 사용하여 로그 아웃을 용이하게 할 때는 참조를 유지해야합니다.
코드 테스트를 트리거하여 로그 아웃 효과를 확인하십시오.
이 팁은 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 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";
}
?>