PHP マニュアル
前のページ | 第 16章制御構造 | 次のページ

# declare

declare 命令は、あるコードブロックの中に 実効命令をセットするために使用されます。declare の文法は他の制御構造と似ています。

    declare (命令)
     文

命令の箇所で、セットされた declareブロックの挙動を指定することが出来ます。 現在のところ、使用できる命令はticksの 一つだけです。( ticksに関しては以下を参照してください)

declareブロックの文 の実行のされ方や実行時にどのような作用が起こるかについては 命令に何が指定されたかに依存します。

declare構造はグローバルスコープしても使用され、 それはそれ以降のコード上の全てにおいて影響します。

`<?php // 以下は同じです: // you can use this: declare(ticks=1) { // ここに全てのスクリプトを書く } // or you can use this: declare(ticks=1); // ここに全てのスクリプトを書く ?>`

## ticks

tickとはdeclareブロックの実行中にパーサが N個の低レベル命令を実行するごとに 発生するイベントのことです。Nの値は declareブロックの命令の箇所で ticks=Nのように 指定します。

tickごとに発生させるイベントはregister_tick_function() を使用して指定します。詳細は以下の例を参照してください。1回のtickで 複数のイベントが起こり得ることに注意してください。

例 16-3. PHPのコードの一部をプロファイルする
`<pre> <?php // 呼び出されるとその時間を記録する関数 function profile ($dump = FALSE) { static $profile; // 格納されたプロファイルを返し、その値を削除する if ($dump) { $temp = $profile; unset($profile); return $temp; } $profile[] = microtime(); } // tickハンドラの設定 register_tick_function("profile"); // declareブロックの前で初期化しておく profile (); // 2命令ごとにtickを投げるように設定しブロックを実行する declare (ticks=2) { for ($x = 1; $x < 50; ++$x) { echo similar_text (md5($x), md5($x*$x)), "<br />"; } } // プロファイラに格納されたデータを表示する print_r (profile(TRUE)); ?> </pre>`

この例では、'declare'ブロックのコード中で2個の低レベル 命令が実行されるごとにその時間を記録してプロファイルを 行っています。この情報はコードのあるセクションの中で 遅い箇所を探すのに使用できます。この処理は他の手法でも 使用できます。ticksを使用することで実装が簡単になる 場合が多々あるのです。

ticksはデバッグ、単純なマルチタスク処理、バックグラウンドI/Oや その他多くの処理を実装するのに便利です。

register_tick_function()と unregister_tick_function()も参照してください。

前のページ | ホーム | 次のページ
switch | 上に戻る | return