declareについて調べている途中。
<?php
function ticks_echo() {
static $count_of_ticks = 1;
echo 'ticks >> '.$count_of_ticks."<br />";
$count_of_ticks++;
}
register_tick_function( 'ticks_echo' );
declare( ticks = 1 ) {
for($n =1;$n<4;$n++)
{
echo "何かしらの処理:".$n."回目<br />";
}
}
/*
僕の予想:
何かしらの処理:1回目
ticks >> 1
何かしらの処理:2回目
ticks >> 2
何かしらの処理:3回目
ticks >> 3
実際の結果:
何かしらの処理:1回目
ticks >> 1
ticks >> 2
何かしらの処理:2回目
ticks >> 3
ticks >> 4
何かしらの処理:3回目
ticks >> 5
ticks >> 6
ticks >> 7
ticks >> 8
*/
えっ、こいつら、ボディランゲージ通じない感じ。
どうやら、declareは{}ブロックの終わりでも一度評価されるよう。
つまり、
declare( ticks = 1 ) {
for($n =1;$n<4;$n++)
{
echo "何かしらの処理:".$n."回目<br />";
}
}
の挙動は
何かしらの処理:1回目
ticks >> 1//forの最初のecho
ticks >> 2//forの最初の{}閉じ
何かしらの処理:2回目
ticks >> 3//forの2回目のecho
ticks >> 4//forの2回目の{}閉じ
何かしらの処理:3回目
ticks >> 5//forの3回目のecho
ticks >> 6//forの3回目の{}閉じ
ticks >> 7//forの4回目の{}閉じ(forの条件式が$n===4でfalseなので、中の文は実行されず)
ticks >> 8//declare最後の{}閉じ
となっている(のでしょう)。
その辺を考えて使わないと、痛い目にあいそう。
というか、時間計測くらいしか使いどころが分からない・・・。
0 件のコメント:
コメントを投稿