うっち〜で〜す。
今回はPHPの閉じタグについて検証してみました。
ZendFrameworkではコーディング規約でPHPの閉じタグは
書いてはいけないことになっています。
でもその理由までちゃんと調べていなかったので調べてみました!
PHPではその用途上、”<?php”から”?>”以外の箇所は
HTMLとして出力される仕様になっているので、
閉じタグの後ろに無駄な改行があると
HTMLとして出力されてしまうようです!大変!!
ということで、問題が起きる場合を試してみました。
require.php
<?php
function Test($hoge) {
echo $hoge;
}
?>
// 改行
test.php
<?php
require("require.php");
header('Location: http://www.example.com/');
Test("test");
?>
test.phpを実行するとWarningが出ます。
headerの前に改行分が出力されてしまっているので当然ですね。。
この場合、原因が掴みにくいので気をつけましょう><
PHPの仕様では閉じタグは無しでも許容されているので
ZendFramework同様に書かないということで統一させた方が良いかもしれません。
ただし、HTMLの文中に書く場合はもちろん閉じタグは必要になりますよー
※検証した環境
OS:MacOSX 10.6.4
PHP:5.3.2
うっち〜 PHP
はじめましてー
今月からお世話になりますうっち〜です。
よろしくお願いします!
さて、最初から何を書こうか迷ってしまいましたが・・・
前々から気になってたPHPのfor文の挙動について調べてみることにしました。
配列の要素をfor文で取り出す時に
for文の条件式でcount関数を使用している例をよく見るのですが
for ($i = 0; $i < count($ary); $i++) {
ループする度にcount関数が毎回処理されてそうで・・・
僕は事前にcount関数を使用する形を使用しています。
$cnt = count($ary);
for ($i = 0; $i < $cnt; $i++) {
でも、本当にそのような挙動になっているのか!?
実はPHPが最適化してくれているのかも??
と、確信がなかったのでいつも気になっていました。
(for文にcount入れた方が楽なので無駄なことしてるんじゃないかと・・・)
ということで、ちょっと調べてみました。
下記A,Bの2パターンのコードを用意し、
gdbでcount関数内にブレークポイントを設定し
それぞれ実行してみてcount関数が呼ばれる回数を調べてみました。
// パターンA
$ary = array(1, 2, 3, 4, 5);
$cnt = count($ary);
for ($i = 0; $i < $cnt; $i++) {
echo $ary[$i];
}
// パターンB
$ary = array(1, 2, 3, 4, 5);
for ($i = 0; $i < count($ary); $i++) {
echo $ary[$i];
}
■結果
count関数が呼ばれた回数は
パターンA:1回
パターンB:7回
でしたー。
無駄ではなかったようです!
ただ、
実際にどのくらいの処理時間の差が出るのか?
気にするほどの時間なのか?
が気になるところです。
なのでそれはまたの機会にでも!
※※以下追記※※
環境書いてませんでした。。
※検証した環境
OS:MacOSX 10.6.4
PHP:5.3.2
うっち〜 PHP