ボンジュール・マドモアゼル

本サイトの情報は自己責任にてご利用下さい。

[未分類] 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);
}
?>
There are alternatives available, like wrapping this all in loops and using break or wrap it in an try {} catch block and throw exceptions, but goto can be cleaner.[...]
Goto your Christmas presents with PHP 5.3
の but goto can be cleaner. が何を言わんとしているか、わからなかったが、
public function getSystemValue($key) {   

$this->getLogger()->log(LOG_DEBUG, 'start');

// すでに読み込み済みデータの場合はそのデータを使用
$value = $this->findCache($key);
if (!is_null($value)) {
goto END;
}

// DBから取得
$value = $this->getDao()->read($key);
if (!is_null($value)) {
goto END;
}

// 設定ファイルから取得
$value = $this->getConfig()->get($key);

END:
$this->getLogger()->log(LOG_DEBUG, "end(value=$value)");
return $value;
}

PHP5.3でgotoが追加される件


do  {

$value = $this->findCache($key);
if (!is_null($value)) {
break;
}

$value = $this->getDao()->read($key);
if (!is_null($value)) {
break;
}

$value = $this->getConfig()->get($key);

}while(false);

$this->getLogger()->log(LOG_DEBUG, "end(value=$value)");
return $value;

と書き換えてみて、ようやく、but goto can be cleaner. が実感できた。

追記
ここに和訳があった。
http://www.sooey.com/journal/2008/12/31/925/
<<URLDownloadToFile で汎用サイトダウンロードツールを作れない理由 | ホーム | 在庫の意義>>

コメント

コメントの投稿

管理者にだけ表示を許可する

画像の文字を半角数字で下記ボックスに記入ください。
文字が読みにくい場合はブラウザの更新をすると新しい文字列が表示されます。