Translate

2016年2月19日金曜日

【php】declare&&ticksと分かり合えるのには時間がかかる気がする

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 件のコメント:

コメントを投稿