Rubyの例外処理をPHPと比較してみるよ

というか、まあ比較しながらじゃないと私が分からないだけなんだけど。

catchとthrow

Rubyにおいてcatch・throwはループ処理のメソッドで、例外処理とは全く関係ない。例外処理はraise・rescueメソッドを使う。

catch
ループを抜け出す為のラベルとして使う。
throw
設定されたcatchに抜ける為のメソッド。

throwはイメージとしてgotoみたいな感じ?

catch :ラベル名 do
  処理
  処理
  for ほげほげ do
    処理
    throw :ラベル名 処理条件
  end
  処理
  処理
end
# ← throw :ラベル名 に引っかかったらここに抜ける

こういうこと?

例外処理

try〜catch〜exception は、Rubyだとこんな感じになる。

begin
  処理
  処理
rescue Exception => e
  エラー処理
ensure
  エラーに関係なく必ず通る処理
end

PHPでいうところの

try {
  処理
  処理
}
catch (Exception $e) {
  エラー処理
}
finally {
  エラーに関係なく必ず通る処理
}

と同じ。