<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ja">
	<id>https://mochiu.net/index.php?action=history&amp;feed=atom&amp;title=PHP%E3%81%AE%E5%9F%BA%E7%A4%8E_-_%E4%BE%8B%E5%A4%96%E5%87%A6%E7%90%86</id>
	<title>PHPの基礎 - 例外処理 - 版の履歴</title>
	<link rel="self" type="application/atom+xml" href="https://mochiu.net/index.php?action=history&amp;feed=atom&amp;title=PHP%E3%81%AE%E5%9F%BA%E7%A4%8E_-_%E4%BE%8B%E5%A4%96%E5%87%A6%E7%90%86"/>
	<link rel="alternate" type="text/html" href="https://mochiu.net/index.php?title=PHP%E3%81%AE%E5%9F%BA%E7%A4%8E_-_%E4%BE%8B%E5%A4%96%E5%87%A6%E7%90%86&amp;action=history"/>
	<updated>2026-09-04T20:15:05Z</updated>
	<subtitle>このウィキのこのページに関する変更履歴</subtitle>
	<generator>MediaWiki 1.43.9</generator>
	<entry>
		<id>https://mochiu.net/index.php?title=PHP%E3%81%AE%E5%9F%BA%E7%A4%8E_-_%E4%BE%8B%E5%A4%96%E5%87%A6%E7%90%86&amp;diff=12447&amp;oldid=prev</id>
		<title>Wiki: /* バックスラッシュの有無 */</title>
		<link rel="alternate" type="text/html" href="https://mochiu.net/index.php?title=PHP%E3%81%AE%E5%9F%BA%E7%A4%8E_-_%E4%BE%8B%E5%A4%96%E5%87%A6%E7%90%86&amp;diff=12447&amp;oldid=prev"/>
		<updated>2024-11-20T04:50:48Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;バックスラッシュの有無&lt;/span&gt;&lt;/p&gt;
&lt;a href=&quot;https://mochiu.net/index.php?title=PHP%E3%81%AE%E5%9F%BA%E7%A4%8E_-_%E4%BE%8B%E5%A4%96%E5%87%A6%E7%90%86&amp;amp;diff=12447&amp;amp;oldid=11913&quot;&gt;差分を表示&lt;/a&gt;</summary>
		<author><name>Wiki</name></author>
	</entry>
	<entry>
		<id>https://mochiu.net/index.php?title=PHP%E3%81%AE%E5%9F%BA%E7%A4%8E_-_%E4%BE%8B%E5%A4%96%E5%87%A6%E7%90%86&amp;diff=11913&amp;oldid=prev</id>
		<title>Wiki: ページの作成:「== 概要 == 例外処理は、プログラムの実行中に予期せぬエラーが発生した場合、通常の処理フローを中断して特別な対応を行うための仕組みである。&lt;br&gt; PHPでは、エラーが発生した箇所から即座に処理を中断して、適切なエラー処理ルーチンにジャンプすることができる。&lt;br&gt; &lt;br&gt; &lt;code&gt;try&lt;/code&gt;ブロックではエラーが発生する可能性のあるコードを配置し…」</title>
		<link rel="alternate" type="text/html" href="https://mochiu.net/index.php?title=PHP%E3%81%AE%E5%9F%BA%E7%A4%8E_-_%E4%BE%8B%E5%A4%96%E5%87%A6%E7%90%86&amp;diff=11913&amp;oldid=prev"/>
		<updated>2024-11-06T08:13:58Z</updated>

		<summary type="html">&lt;p&gt;ページの作成:「== 概要 == 例外処理は、プログラムの実行中に予期せぬエラーが発生した場合、通常の処理フローを中断して特別な対応を行うための仕組みである。&amp;lt;br&amp;gt; PHPでは、エラーが発生した箇所から即座に処理を中断して、適切なエラー処理ルーチンにジャンプすることができる。&amp;lt;br&amp;gt; &amp;lt;br&amp;gt; &amp;lt;code&amp;gt;try&amp;lt;/code&amp;gt;ブロックではエラーが発生する可能性のあるコードを配置し…」&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新規ページ&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== 概要 ==&lt;br /&gt;
例外処理は、プログラムの実行中に予期せぬエラーが発生した場合、通常の処理フローを中断して特別な対応を行うための仕組みである。&amp;lt;br&amp;gt;&lt;br /&gt;
PHPでは、エラーが発生した箇所から即座に処理を中断して、適切なエラー処理ルーチンにジャンプすることができる。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;try&amp;lt;/code&amp;gt;ブロックではエラーが発生する可能性のあるコードを配置して、&amp;lt;code&amp;gt;catch&amp;lt;/code&amp;gt;ブロックでは発生した例外を受け取って適切な処理を行う。&amp;lt;br&amp;gt;&lt;br /&gt;
オプションで&amp;lt;code&amp;gt;finally&amp;lt;/code&amp;gt;ブロックを追加することができ、例外の発生有無に関わらず必ず実行する処理を記述する。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
例外を投げる場合は、&amp;lt;code&amp;gt;throw&amp;lt;/code&amp;gt;キーワードを使用する。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
PHPには、状況に応じた様々な例外クラスが用意されている。&amp;lt;br&amp;gt;&lt;br /&gt;
* LogicException&lt;br /&gt;
*: プログラムのロジックに関するエラー&lt;br /&gt;
* RuntimeException&lt;br /&gt;
*: 実行時のエラー&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
独自の例外クラスを定義することにより、アプリケーション固有のエラー状況をより適切に表現できる。&amp;lt;br&amp;gt;&lt;br /&gt;
例えば、データベース関連のエラーにはDatabaseException、ファイル操作のエラーにはFileOperationException等、目的に応じた例外クラスを定義できる。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
例外処理では、より具体的な例外から順に処理を記述して、最後に一般的な例外を捕捉するという階層的な方法が推奨される。&amp;lt;br&amp;gt;&lt;br /&gt;
これにより、エラーの種類に応じて適切な対応が可能になる。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
捕捉した例外オブジェクトからは、エラーメッセージ、エラーコード、発生場所 (ファイル名と行番号)、スタックトレース等の重要な情報を取得できる。&amp;lt;br&amp;gt;&lt;br /&gt;
これらの情報は、デバッグやエラーログの記録に活用される。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
重大な例外が発生した場合は、システムのログにその内容を記録することが推奨される。&amp;lt;br&amp;gt;&lt;br /&gt;
ただし、セキュリティ上の観点から、エンドユーザに表示するエラーメッセージには詳細な技術情報を含めないよう注意が必要である。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
開発時には、予期できる例外は明示的にキャッチして、適切な対応を実装することが重要である。&amp;lt;br&amp;gt;&lt;br /&gt;
また、例外を投げ直すことで、より上位の層で統一的なエラー処理を行うことも可能である。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;※注意&amp;lt;/u&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;例外処理は、プログラムの堅牢性を高めるための重要な機能であるが、過度な使用は避けるべきである。&amp;lt;/u&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;通常の制御フローとして扱えるケースでは、条件分岐等の一般的な制御構文を使用することが推奨される。&amp;lt;/u&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 基本的な例外処理 ==&lt;br /&gt;
PHPでは、try-catchブロックを使用して例外を処理する。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
例外オブジェクトには役立つメソッドが用意されており、&amp;lt;br&amp;gt;&lt;br /&gt;
getMessageメソッドでエラーメッセージ、getCodeメソッドでエラーコード、getFileメソッドおよびgetLineメソッドでエラーが発生したファイルと行番号を取得できる。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
 try {&lt;br /&gt;
    // 例外が発生する可能性のある処理&lt;br /&gt;
    throw new Exception(&amp;quot;エラーが発生&amp;quot;);&lt;br /&gt;
 }&lt;br /&gt;
 catch (Exception $e) {&lt;br /&gt;
    // 例外を処理する処理&lt;br /&gt;
    echo $e-&amp;gt;getMessage();&lt;br /&gt;
 }&lt;br /&gt;
 finally {&lt;br /&gt;
    // 必ず実行される処理&lt;br /&gt;
 }&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
以下の例では、複数の例外をキャッチしている。&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
 try {&lt;br /&gt;
    // 危険な処理&lt;br /&gt;
 }&lt;br /&gt;
 catch (DatabaseException $e) {&lt;br /&gt;
    // データベース関連の例外処理&lt;br /&gt;
 }&lt;br /&gt;
 catch (FileNotFoundException $e) {&lt;br /&gt;
    // ファイル関連の例外処理&lt;br /&gt;
 }&lt;br /&gt;
 catch (Exception $e) {&lt;br /&gt;
    // その他の例外処理&lt;br /&gt;
 }&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
以下の例では、PDOの例外をキャッチして、ログに記録した後、より適切なカスタム例外を投げ直している。&amp;lt;br&amp;gt;&lt;br /&gt;
これにより、システム全体で一貫した例外処理が可能になる。&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
 try {&lt;br /&gt;
    $pdo = new PDO(&amp;quot;mysql:host=localhost;dbname=test&amp;quot;, &amp;quot;user&amp;quot;, &amp;quot;password&amp;quot;);&lt;br /&gt;
    $pdo-&amp;gt;setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);&lt;br /&gt;
 &lt;br /&gt;
    $stmt = $pdo-&amp;gt;prepare(&amp;quot;SELECT * FROM users WHERE id = :id&amp;quot;);&lt;br /&gt;
    $stmt-&amp;gt;execute([&amp;#039;id&amp;#039; =&amp;gt; $userId]);&lt;br /&gt;
 }&lt;br /&gt;
 catch (PDOException $e) {&lt;br /&gt;
    error_log(&amp;quot;データベースエラー: &amp;quot; . $e-&amp;gt;getMessage());&lt;br /&gt;
    throw new DatabaseException(&amp;quot;データベース接続に失敗&amp;quot;);&lt;br /&gt;
 }&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== カスタム例外クラス ==&lt;br /&gt;
独自の例外クラスを定義することにより、より具体的なエラー処理が可能になる。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
 class DatabaseException extends Exception&lt;br /&gt;
 {&lt;br /&gt;
    public function __construct($message, $code = 0) {&lt;br /&gt;
       parent::__construct($message, $code);&lt;br /&gt;
    }&lt;br /&gt;
 }&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== バックスラッシュの有無 ==&lt;br /&gt;
* バックスラッシュなし（Exception）の場合&lt;br /&gt;
*: まず、現在の名前空間内でExceptionクラスを探す。&lt;br /&gt;
*: グローバル名前空間のExceptionクラスにフォールバックする。&lt;br /&gt;
* バックスラッシュあり（\Exception）の場合&lt;br /&gt;
*: 直接グローバル名前空間のExceptionクラスを参照する。&lt;br /&gt;
*: より明示的で安全な記述である。&lt;br /&gt;
*: &amp;lt;br&amp;gt;&lt;br /&gt;
*: 特に名前空間を使用している場合は、バックスラッシュを付けることを推奨する。&lt;br /&gt;
*:* 意図しない名前解決の衝突を防げる。&lt;br /&gt;
*:* コードの意図が明確になる。&lt;br /&gt;
*:* 実行速度がわずかに速くなる。(名前空間の解決プロセスをスキップできるため)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
 try {&lt;br /&gt;
    // 処理&lt;br /&gt;
 }&lt;br /&gt;
 catch (Exception $e) {&lt;br /&gt;
    // エラー処理&lt;br /&gt;
 }&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
 try {&lt;br /&gt;
    // 処理&lt;br /&gt;
 }&lt;br /&gt;
 catch (\Exception $e) {&lt;br /&gt;
    // エラー処理&lt;br /&gt;
 }&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
以下の例のような場合、バックスラッシュを付けることにより、確実にPHPの標準Exceptionクラスを参照することができる。&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
 namespace MyApp\Controllers;&lt;br /&gt;
 &lt;br /&gt;
 try {&lt;br /&gt;
    // 処理&lt;br /&gt;
 }&lt;br /&gt;
 catch (\Exception $e) {  // グローバル名前空間のExceptionを明示的に指定&lt;br /&gt;
    // エラー処理&lt;br /&gt;
 }&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{#seo:&lt;br /&gt;
|title={{PAGENAME}} : Exploring Electronics and SUSE Linux | MochiuWiki&lt;br /&gt;
|keywords=MochiuWiki,Mochiu,Wiki,Mochiu Wiki,Electric Circuit,Electric,pcb,Mathematics,AVR,TI,STMicro,AVR,ATmega,MSP430,STM,Arduino,Xilinx,FPGA,Verilog,HDL,PinePhone,Pine Phone,Raspberry,Raspberry Pi,C,C++,C#,Qt,Qml,MFC,Shell,Bash,Zsh,Fish,SUSE,SLE,Suse Enterprise,Suse Linux,openSUSE,open SUSE,Leap,Linux,uCLnux,Podman,電気回路,電子回路,基板,プリント基板&lt;br /&gt;
|description={{PAGENAME}} - 電子回路とSUSE Linuxに関する情報 | This page is {{PAGENAME}} in our wiki about electronic circuits and SUSE Linux&lt;br /&gt;
|image=/resources/assets/MochiuLogo_Single_Blue.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
__FORCETOC__&lt;br /&gt;
[[カテゴリ:Web]]&lt;/div&gt;</summary>
		<author><name>Wiki</name></author>
	</entry>
</feed>