strpos($str, $token) === 0と$str[0]===$token

FormPopulationFilterを眺めてたらstrpos($action, '/')===0とかいう記述があったのでこれも含めて再度ベンチマークをとってみた。前回より微妙に早くなってるのは$tokenも先に定義してるので""のパース時間が短縮されたおかげだと思います。

[senna@vine senna]$ time php -r '$str="abbbb"; $token="a"; for($i=0; $i < 1000000; $i++){ $str[0] === $token;}'

real    0m1.617s
user    0m1.610s
sys     0m0.010s
[senna@vine senna]$ time php -r '$str="abbbb"; $token="a"; for($i=0; $i < 1000000; $i++){ strpos($str, $token)===0;}'

real    0m2.174s
user    0m2.170s
sys     0m0.000s
[senna@vine senna]$ time php -r '$str="abbbb"; $token="a"; for($i=0; $i < 1000000; $i++){ substr($str, 0)===$token;}'

real    0m2.466s
user    0m2.460s
sys     0m0.010s
[senna@vine senna]$ time php -r '$str="abbbb"; $token="a"; for($i=0; $i < 1000000; $i++){;}'

real    0m0.682s
user    0m0.670s
sys     0m0.010s

ということで、一文字目がある決まった文字であるかを判別するには$str[0]===$tokenを用いましょう。