※ パクレゼルヴではWeb開発エンジニアを大募集中!詳細はこちら

Archive

Author Archive

PHPの閉じタグ、イラネ  

2010/8/30 月曜日 14:04:43

うっち〜で〜す。
今回は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文の条件式にcount関数を使用すると・・・  

2010/7/26 月曜日 19:12:22

はじめましてー
今月からお世話になりますうっち〜です。
よろしくお願いします!

さて、最初から何を書こうか迷ってしまいましたが・・・

前々から気になってた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