declare 命令は、あるコードブロックの中に 実効命令をセットするために使用されます。declare の文法は他の制御構造と似ています。
declare (命令) 文
命令の箇所で、セットされた declareブロックの挙動を指定することが出来ます。 現在のところ、使用できる命令はticksの 一つだけです。( ticksに関しては以下を参照してください)
declareブロックの文 の実行のされ方や実行時にどのような作用が起こるかについては 命令に何が指定されたかに依存します。
declare構造はグローバルスコープしても使用され、 それはそれ以降のコード上の全てにおいて影響します。
<?php
// 以下は同じです:
// you can use this:
declare(ticks=1) {
// ここに全てのスクリプトを書く
}
// or you can use this:
declare(ticks=1);
// ここに全てのスクリプトを書く
?>
PHP 5.3.0 で tick は非推奨となりました。 PHP 6.0.0 で削除される予定です。
tickとはdeclareブロックの実行中にパーサが N個の低レベル命令を実行するごとに 発生するイベントのことです。Nの値は declareブロックの命令の箇所で ticks=Nのように 指定します。
tickごとに発生させるイベントはregister_tick_function() を使用して指定します。詳細は以下の例を参照してください。1回のtickで 複数のイベントが起こり得ることに注意してください。
例1 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>
ticksはデバッグ、単純なマルチタスク処理、バックグラウンドI/Oや その他多くの処理を実装するのに便利です。
register_tick_function()と unregister_tick_function()も参照してください。