PHP 5.3で登場、goto命令
http://journal.mycom.co.jp/news/2009/01/08/037/index.html
経由
Goto your Christmas presents with PHP 5.3
http://schlueters.de/blog/archives/94-Goto-your-Christmas-presents-with-PHP-5.3.html
んと…
ZEND DEVELOPER ZONE, PHP: GOTO 5.3でJohannes Schluter氏の公開したブログが紹介されている。氏は自身のブログにおいてPHP5.3で導入される新機能のいくつかを紹介しており、特にGoto your Christmas presents with PHP 5.3が興味深い。PHP 5.3で導入されるgoto構文をわかりやすいコードとともに紹介している。
はぁ「わかりやすいコード」ですかなるほどふぅんへぇはぁほぉあほ。
一応、サンプルコードを書いてみる。
<?php function process_file($filename) { $fp = fopen($filename, "r"); if (!$fp) { goto cleanup; } $row = fread($fp, 1024); // do something with the row if ($error_while_processing) { goto cleanup; } $a_few_bytes = fread($fp, 4); // do something again ... if ($error_while_processing) { goto cleanup; } /* ... */cleanup: fclose($fp); } ?>
……………orz
どう考えても
<?php function process_file($filename) { $ret = false; $fp = fopen($filename, "r"); if (false === $fp) { return $ret; } $row = fread($fp, 1024); // do something with the row if (false === $error_while_processing) { $a_few_bytes = fread($fp, 4); // do something again ... if (false === $error_while_processing) { $ret = true; } } /* ... */ fclose($fp); // return $ret; } ?>
せめてこうだべさっていうかどこにgotoが介在する余地あるねん?
或いはちゃんと例外でぶん投げるかね。
goto命令の多用はメンテナンスできないソースコードを生むため懸念されることも多いが、Goto your Christmas presents with PHP 5.3で紹介されているようにエラー発生時に飛ばしてまとめて終端処理をするというのはgoto命令がよく使われるケースだ。
えと…何のために「例外」がある思うてるねん?
っていうか筆者さん、例外って概念ご存じないのかしらんもしかして*1。
さらにっていうかなんていうか。マイコミジャーナルってろくな記事が無いような気がするのは気のせいかしらん?
ついでに。元のやつだと「open出来てないハンドルをcloseしてる」し。
なんていうか…「だめだこりゃ」。