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() も参照してください。