2011年11月14日月曜日

php goto文

PHP5.3からgoto文がサポートされた。
詳しくはマニュアルを
http://www.php.net/manual/ja/control-structures.goto.php

goto文はCやperlでもあります。
goto文はあまり使わないようにとされているようです。
確かに使い方を誤るともの凄くソースが読みづらくなります。
上から下に進んでいくのに、下から上にjumpするように書かれていたりなどしたら、ソースを読む時に処理を追い辛くてしょうがないですね。
エラー時や特定時のみ利用するのがいいみたいです。

特定時のみ使うのであれば有効かと思い、軽くパフォーマンスを見てみました。
結果は以下のようになっています。

goto文

<?php
$j = 0;
for ($i=0;$i<10000000;$i++) {
goto A;

A : {
$j++;
}
}

echo $j;
exit(0);

実行結果

$ time php goto.php
10000000
real 0m1.290s
user 0m1.152s
sys 0m0.036s


関数

<?php
$j = 0;
for ($i=0;$i<10000000;$i++) {
calc($j);
}

echo $j;
exit(0);

function calc(&$j) {
$j++;
}

実行結果

$ time php func.php
10000000
real 0m3.087s
user 0m2.760s
sys 0m0.052s


goto文の方が早いですね。
関数を呼ぶオーバヘッドが無いからかな?

一度の処理で、複数回のエラー処理をしないといけないときなどは、関数化するよりもgoto文を使うのもありかもですね。

0 件のコメント:

コメントを投稿