PHPでタイマー効果を実装する方法
PHP には、JS の setInterval や setTimeout のようなネイティブのタイマー関連関数がありません。ただし、declare を使用するなど、他の方法でも実行できます。では、declare の使い方を紹介しましょう。
まず、宣言の実装方法を見てから、declare 式が何であるかを学びましょう。
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() } }
これは、実行後に現在時刻を毎秒出力する非常に単純なコードです。
declare 構文は次のように定義されます。
declare (directive) statemaent;
declare 構造は、コードの一部の実行命令を設定するために使用されます
directive 部分 宣言スニペットの動作を設定できます。現在知られている命令は、ティックとエンコーディングの 2 つだけです。
ティック (クロック サイクル) は、インタプリタが宣言でタイミングを計ることができる N 個の低レベル ステートメントを実行するたびに発生するイベントです。コードセグメント。 N の値は、declare のディレクティブ部分の Nicks=N で指定します。
各ティックで発生するイベントは、 register_tick_function()
ここではダニの使用のみを研究します。
上記のコードでは、 register_tick_function() を使用してティックの do_tick() メソッドを登録し、宣言で Nicks=1 を指定します。これは、時間を計測できる低レベルのステートメントが実行されるたびに、 register_tick_function()が実行される登録方法です。宣言コード ブロック内の while が毎回ループする場合、1 秒間停止する sleep() があり、この sleep() は時間を計測できる低レベルのステートメントです。
つまり、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"; //
コメントは非常に詳細なので、1 つずつ説明する必要はありません。ティックを 2 に設定し、宣言下のステートメントに中括弧を使用しなかった結果を見てみましょう。
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
この宣言が、その定義の後続のコードに影響を与えていることがわかりますが、実際にはそうではありません。ネストされたページがある場合、親ページの後続のコードは効果がないことに注意してください。 Nicks=2 を定義した後、 register_tick_function() によって登録された関数コードは、2 つの低レベル タイマー コードの後に 1 回実行されます。
テスト コード:
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 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

CakePHP は、PHP 用のオープンソース フレームワークです。これは、アプリケーションの開発、展開、保守をより簡単にすることを目的としています。 CakePHP は、強力かつ理解しやすい MVC のようなアーキテクチャに基づいています。モデル、ビュー、コントローラー

ファイルのアップロードを行うには、フォーム ヘルパーを使用します。ここではファイルアップロードの例を示します。

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、

CakePHP はオープンソースの MVC フレームワークです。これにより、アプリケーションの開発、展開、保守がはるかに簡単になります。 CakePHP には、最も一般的なタスクの過負荷を軽減するためのライブラリが多数あります。

このチュートリアルでは、PHPを使用してXMLドキュメントを効率的に処理する方法を示しています。 XML(拡張可能なマークアップ言語)は、人間の読みやすさとマシン解析の両方に合わせて設計された多用途のテキストベースのマークアップ言語です。一般的にデータストレージに使用されます
