[PHP-users 1578] Re: C 言語のGOTO みたいなことしたい
Osamu Shigematsu
php-users@php.gr.jp
Tue, 28 Aug 2001 15:00:56 +0900
重松です。松嶋さん、こんにちは。
> なかなかトリッキーな方法ですね。^^;
try{}catch(){} がつかれば、こんなべたべたなことをしなくてもいいんですが。;-)
> PHP マニュアルより
>> breakでは、オプションの引数で ネストした
>> ループ構造を抜ける数を指定することができます。
>
> ということで、
>
> for($i=0; $i<10; $i++) {
> for($j=0; $j<10; $j++) {
> for($k=0; $k<10; $k++) {
> break 3;
> }
> }
> }
>
> とかできるようですよ。
>
> # とはいえ、外側にループが増えたり減ったりしたら、その内側の
> # break に指定した数字はすべて変更しなければなりませんが。
というか、思いっきり破綻しそうな予感がしますね。
$err = false;
do{
do{
do{
/* 処理 */
$db = new database;
$sql = "select * from person_master";
if(!$db->query($sql)){
$err = "SQL error: $s ";
$err .= sprintf("in %s at %d",__FILE__,__LINE__);
break;
}
while(false);
if($err) break;
while(false);
if($err) break;
}while(false);
if($err){
print "err = $err";
}
みたいに、ちまちま抜けた方が、安全かも、しれませんね。
あるいは関数にしておいて、return で一発抜け。
ところで、ふと思ったんですが、
$foo = "world";
$bar = "Hello, $foo!";
で、$bar は "Hello, world!" になると思いますが、定数とか、__FILE__ だとか、
「.」で連結したり、sprintf() に頼らずに出力できないのでしょうか。
$foo = "file: {__FILE__}";
とかでできるのかしら?
# やって見ろと言われそう。
--
Osamu Shigematsu
http://www.ravi.ne.jp/
mailto:shige@ravi.ne.jp