PHP에는 JS의 setInterval 또는 setTimeout과 유사한 기본 타이머 관련 기능이 없습니다. 하지만 선언을 사용하는 등 다른 방법으로 이를 수행할 수 있습니다. 다음으로 에디터가 선언의 사용법을 소개하겠습니다
우선 어떻게 구현되는지 살펴보고 선언 표현식이 무엇인지 알아보겠습니다.
function do_tick($str = '') { list($sec, $usec) = explode(' ', microtime()); printf("[%.4f] Tick.%s\n", $sec + $usec, $str); } register_tick_function('do_tick'); do_tick('--start--'); declare (ticks = 1) { while (1) { sleep(1); // 这里,每执行一次就去调用一次do_tick() } }
실행 후 1초마다 현재 시간을 출력하는 매우 간단한 코드입니다.
declare 구문은 다음과 같이 정의됩니다.
declare (directive) statemaent;
선언 구조는 코드 조각의 실행 지침을 설정하는 데 사용됩니다.
지시문 부분을 사용하면 선언 코드 세그먼트의 동작을 설정할 수 있습니다. 현재 알려진 명령은 틱과 인코딩 두 가지뿐입니다. 틱(클럭 주기)은 인터프리터가 선언 코드 세그먼트에서 N개의 시간 지정 하위 수준 명령문을 실행할 때마다 발생하는 이벤트입니다. N의 값은 선언의 지시문 부분에서 Ticks=N으로 지정됩니다. 각 Tick에서 발생하는 이벤트는 Register_tick_function()에 의해 지정됩니다. 여기서는 Tick의 사용만 연구합니다.
그러면 while()은 시간을 측정할 수 있는 저수준 명령문이 아닌가요? 물론 그렇지 않습니다. where와 if와 같은 조건부 판단은 시간을 정할 수 있는 낮은 수준의 진술이 아닙니다.
다음 예시를 통해 단계별로 선언을 실행하는 방법을 살펴보겠습니다.
function test_tick() { static $i = 0; echo 'test_tick:' . $i++, PHP_EOL; } register_tick_function('test_tick'); test_tick(); // test_tick:0 $j = 0; declare (ticks = 1) { $j++; // test_tick:1 $j++; // test_tick: 2 sleep(1); // 停1秒后,test_tick:3 $j++; // test_tick:4 if ($j == 3) { // 条件表达式,不会执行ticks echo "aa", PHP_EOL; // test_tick:5 \n test_tick:6,PHP_EOL会计一次ticks } } // declare使用花括号后面所有代码无效果,作用域限定在花括号以内 echo "bbb"; // echo "ccc"; // echo "ddd"; //
function test_tick1() { static $i = 0; echo 'test_tick1:' . $i++, PHP_EOL; } register_tick_function('test_tick1'); $j = 0; // 此处不计时 declare (ticks = 2); $j++; // test_tick1:0 $j++; sleep(1); // 停1秒后 test_tick1:1 $j++; $j++; // test_tick1:2 if ($j == 4) { // 条件表达式,不会执行ticks // echo "aa", PHP_EOL; echo "aa"; // test_tick:10,test_tick1不执行,没有跳两步,如果用了,PHP_EOL,那么算两步,会输出test_tick1:3 } // declare没有使用花括号将对后面所有代码起效果,如果是require或者include将不会对父页面后续内容进行处理 echo "bbb"; // test_tick1:3 echo "ccc"; echo "ddd"; // test_tick1:4
선언이 이를 정의하는 후속 코드에 영향을 미치는 것을 볼 수 있지만, 주의해야 할 점은 다음과 같습니다. 페이지에 포함된 세트가 있는 경우 상위 페이지의 후속 코드에는 영향을 미치지 않습니다. Ticks=2를 정의한 후, Register_tick_function()에 의해 등록된 함수 코드는 두 개의 하위 수준 타이머 코드 다음에 한 번 실행됩니다.
테스트 코드:
https://github.com/zhangyue0503/dev-blog/blob/master/php/201911/source/PHP%E6%B2%A1%E6%9C%89%E5%AE%9A%E6%97%B6%E5%99%A8%EF%BC%9F.php
추천 학습:
php 비디오 튜토리얼위 내용은 PHP에서 타이머 효과를 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!