Java経験者がPHPでハマる10選の5 「例外処理の違い」
こんにちは。ゆうせいです。
Javaをしっかり学んだ人がPHPに移行すると、「似てるはずなのに全然感覚が違う!」と驚くことが多いんです。
同じオブジェクト指向言語ですが、設計思想や実行環境、型の扱い方などがかなり異なります。
Java経験者がPHPを学ぶときにハマりやすいポイントを10個にまとめ、具体的な解説と回避方法をお伝えしています。
5つ目「例外処理の違い」を掘り下げます。
例外処理の違い
JavaとPHPはどちらもtry
/ catch
を使って例外処理をしますが、「何が例外になるか」「例外の扱い方」「強制性」が大きく異なります。
Java経験者がPHPに移行すると、「エラーなのに例外にならない!」という現象に戸惑うことが多いです。
JavaとPHPの比較表
項目 | Java | PHP |
---|---|---|
例外の分類 | Checked Exception / Unchecked Exception | Exception / Error(PHP7以降) |
発生タイミング | コンパイル時にチェックされる場合あり | 実行時のみ |
強制性 | Checked Exceptionはthrows 宣言とtry-catch 必須 | 例外は必須ではない(エラーを無視可能) |
エラー種別 | ほぼすべて例外化 | 警告(Warning)、通知(Notice)は例外化されない |
サンプルコードでの違い
Java(強制される例外処理)
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new FileReader("file.txt"));
}
}
FileNotFoundException
は Checked Exception → コンパイル時にthrows
かtry-catch
必須
PHP(例外にならないケース)
$content = file_get_contents("file.txt");
// ファイルがなければ Warning だが例外にはならない
PHPで例外に変える方法
PHPではデフォルトでは警告やエラーは例外にならないため、手動で例外化する必要があります。
方法1:set_error_handler()
を使う
set_error_handler(function($errno, $errstr) {
throw new ErrorException($errstr, $errno);
});
方法2:例外を投げる関数を自作
if (!file_exists("file.txt")) {
throw new Exception("File not found");
}
エラーの階層(PHP7以降)
Throwable
├── Exception
│ ├── LogicException
│ ├── RuntimeException
│ ...
└── Error
├── TypeError
├── ParseError
├── ...
JavaではThrowable
配下にException
とError
がある構造に似ていますが、PHPは後からこの構造を取り入れたため、まだ関数ごとの仕様が統一されていません。
イメージで理解する
- Java:交通ルールが厳しく、信号を守らないと出発できない(コンパイルエラー)
- PHP:信号はあるけど、無視しても走れる。ただし事故ったら自己責任
実務での推奨
- 必要ならエラーを例外に変換して統一的に扱う
- ライブラリやフレームワーク(Laravel, Symfonyなど)はほぼ例外ベースなので、それに合わせる
try-catch
だけでなくfinally
で後処理を確実に書く
Javaは道路に必ずゲートがあるが、PHPはほぼフリーパスという違いです。
次は6つ目「null安全性の甘さ」に進めると、実行時の意図しないエラー回避の考え方が見えてきます。
セイ・コンサルティング・グループの新人エンジニア研修のメニューへのリンク
投稿者プロフィール
- 代表取締役
-
セイ・コンサルティング・グループ株式会社代表取締役。
岐阜県出身。
2000年創業、2004年会社設立。
IT企業向け人材育成研修歴業界歴20年以上。
すべての無駄を省いた費用対効果の高い「筋肉質」な研修を提供します!
この記事に間違い等ありましたらぜひお知らせください。
最新の投稿
山崎講師2025年8月12日Java経験者のためのPHP入門
山崎講師2025年8月12日Java経験者がPHPでハマる10選の1 「型のゆるさ(動的型付け)に戸惑う」
山崎講師2025年8月12日Java経験者がPHPでハマる10選の2 「アクセス修飾子のデフォルト挙動の違い」
山崎講師2025年8月12日Java経験者がPHPでハマる10選の3「コンストラクタの書き方の違い」