SlideShare a Scribd company logo
URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 1
PHPオブジェクト指向再入門
Exceptionによる例外処理
1回3,000円のWeb技術教育・アシアル塾
http://www.asial.co.jp/school/juku.php
URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 2
本講座の目的
本講座の目的
• 書籍だけでは理解することが難しいオブジェクト指向の技術や考え方を、ひとつずつ理解していきます。
受講対象者
• プログラミングの基本的な手法である構造化プログラミング(順次・反復・分岐)や変数・関数の仕組みを理
解している方
第三回目の目標
1. Exceptionを利用した例外処理の仕組みを理解する
2. 継承を利用してオリジナルのExceptionを定義する
URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 3
Exceptionと例外処理
URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 4
Exceptionとは
Exeptionとは
• 「例外」をオブジェクトとして管理するためのクラスです
Exceptionはれっきとしたクラスなのでインスタンス化したり継承することができます。
• Exceptionオブジェクトを扱うための構文(try-catch)と組み合わせて利用できます
例外とは何か?
• 例外的な状況
データベースサーバーが応答しなくなった
注文処理の実行中に在庫がなくなってしまった
外部APIが応答しなくなった
ディスク容量があふれてプログラムが正常に処理できなくなった
Exceptionによる例外処理
• 例外的な状況に陥ったタイミングで「例外を投げる(スロー)」ことを行います
例:throw new exception('例外エラーが発生しました');
– 「throw」という構文に Exceptionオブジェクトを渡します。
– Exceptionオブジェクトはコンストラクタでエラーメッセージを定義できます。
URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 5
エラー処理方法
エラー処理方法
• 関数の返り値によるエラー処理
エラー発生時にreturnでfalseや0、エラーコードなどを返します
• 例外によるエラー処理
例外発生時に、throwで例外(Exceptionオブジェクト)を投げます
例外処理のメリット
• 関数の返り値の型を汚さずに済みます
例としてPHPの関数file_get_contents()関数は取得に成功した場合はデータをstring型で返すのですががエラー
時はboolean型のfalseを返すようになっており、返り値の型が統一できていません。
• 関数を利用する側がif文によるエラーチェックから解放されます
• 例外発生時の処理をcatchブロックでまとめて記述できます
• 正常系の処理と例外発生時の処理が分離できるため可読性が高まります
URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 6
【実習】Exceptionを投げる
Exceptionをインスタンス化してthrowで投げてみましょう
try-catch構文を利用してExceptionをcatchしてみましょう
<?php
throw new Exception("はじめてのException");
Exception.php
<?php
try {
echo "try開始";
throw new Exception("はじめてのException");
echo "try終了";
} catch (Exception $e) {
echo $e->getMessage();
}
URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 7
throwとtry-catch
try-catch構文を使わなかった場合
• throwしたExceptionがキャッチされなかった場合、最終的にPHPがFatalエラーとして処理します
try-catch構文を使った場合
• throwのタイミングでtryブロックの後続の処理が中断されます
中断後はcatchブロックの中の処理が実行されます
• catch (Exception $e) について
Exceptionの記述はタイプヒンティングのようなもので、catch可能なオブジェクトのクラスを指定しています
– この場合はExceptionクラスかその子クラスのオブジェクトをキャッチします
キャッチしたオブジェクトは$eとして参照できるようになります
– $exceptionと記述した場合は$exceptionとして参照できるようになります
URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 8
Exceptionの継承
Exceptionの継承
• Exceptionはクラスなので継承してオリジナルの例外を作成することができます
例:データベース接続に関する例外や注文に関する例外など
• PHPではSPLとしてExceptionを継承した例外が用意されています
http://php.net/manual/ja/spl.exceptions.php
RuntimeException (実行時例外)
– OutOfBoundsException:有効ではないキーを参照した場合にスローされる例外
– OverflowException:コンテナに要素を追加して れた場合にスローされる例外
» ※コンテナは配列やオブジェクトなどの総称
– UnderflowException:空のコンテナの要素を削除しようとした場合にスローされる例外
– RangeException:範囲エラーが発生した場合にスローされる例外
– UnexpectedValueException:期待していない値の際にスローされる例外
LogicException(コードの検査や本来起こりえない状況の対応に使う例外)
– 省略
• PDOが利用するPDOExceptionはRuntimeException を継承しています
http://php.net/manual/ja/class.pdoexception.php
• フレームワークでも例外を用意している場合があります
http://book.cakephp.org/2.0/ja/development/exceptions.html
URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 9
複数のcatch
複数のcatch
• catchは複数用意することができます
• 例えば、まず「RangeException」をcatchしてそれ以外を「RuntimeException」それでもcatchできないも
のは「Exception」としてcatchすることができます。
try {
$item->setStock(-1);
} catch (RangeException $e) {
echo "RangeExceptionが発生しました";
} catch (RuntimeException $e) {
echo "RuntimeExceptionが発生しました";
} catch (Exception $e) {
echo "Exceptionが発生しました";
}
URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 10
Exceptionクラスの諸機能
Exceptionクラスの諸機能
• getMessage()メソッド
例外メッセージを取得します
• getCode()メソッド
例外コードを取得します
• getTrace()メソッド
スタックトレースを取得します
– 例外の発生した個所や呼び出し元情報を確認できます
Exceptionオブジェクトの名前を確認する方法
• get_class()関数
オブジェクトのクラス名を取得します
– Exceptionに限らず利用可能です
URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 11
【実習】ItemクラスのメソッドからExceptionを投げる
ItemクラスのメソッドからExceptionを投げる
<?php
class Item
{
private $stock = 0;
public function setStock($amount)
{
if (is_int($amount)) {
if ($amount >= 0) {
$this->stock = $amount;
return "在庫を" . $this->stock . "に更新しました";
} else {
throw new RangeException('負数による在庫数指定');
}
} else {
throw new UnexpectedValueException("数値(int)以外の在庫数指定");
}
}
}
ExceptionItem.php
URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 12
【実習】Exceptionを複数のcatchで捉える
Exceptionを複数のcatchで捉える
• catch後の処理が同じ場合、個別にcatchする必要はありません
try {
$item = new Item();
$result = $item->setStock(99);
echo $result;
} catch (RangeException $e) {
echo get_class($e) . "が発生しました";
echo $e->getMessage();
} catch (UnexpectedValueException $e) {
echo get_class($e) . "が発生しました";
echo $e->getMessage();
} catch (RuntimeException $e) {
echo get_class($e) . "が発生しました";
echo $e->getMessage();
} catch (Exception $e) {
echo get_class($e) . "が発生しました";
echo $e->getMessage();
}
ExceptionItem.php
URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 13
PHPのエラーとException
URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 14
PHPのエラーを例外として扱う
PHPのエラーをExceptionとして扱う
• PHPにはNoticeやWarningといったエラーが用意されています
• NoticeやWarningを例外として扱う方法を確認していきましょう
set_error_handler()関数
• PHPのエラーが発生した時の処理を設定するための関数です
• エラー発生時の処理としてExceptionを投げる処理を登録します
ExceptionはErrorExceptionというPHPで定義済みの例外を利用します
function exception_error_handler($errno, $errstr, $errfile, $errline ) {
throw new ErrorException($errstr, 0, $errno, $errfile, $errline);
}
set_error_handler("exception_error_handler");
/* 例外を発生させます */
try {
echo $array['foo'];
} catch (ErrorException $e) {
echo $e->getMessage();
}
参考:http://php.net/manual/ja/class.errorexception.php
URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 15
finallyブロック
finallyブロック
• PHP5.5以降からはtry-catch構文でfinallyブロックを記述することができます。
• finallyブロックに記述した処理は例外の発生にかかわらず実行されます
また途中でreturnを実行した場合でも実行されます
<?php
try {
throw new Exception("foo");
} catch (Exception $e) {
echo $e->getMessage();
return;
} finally {
echo "hoge";
}
echo "fuga";
URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 16
【応用課題】Exceptionの継承とネストしたtry-catch
URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 17
【実習】オリジナルのExceptionを定義する
Cartクラスの定義
<?php
class Cart
{
public function order()
{
try {
echo "注文処理を行います";
echo "DBトランザクションを開始します";
$this->inventoryReservation(true);
$this->payment();
echo "DBトランザクションをコミットします";
} catch (StockException $e) {
echo "在庫の引き当てに失敗しました";
echo "DBトランザクションをロールバックします";
throw $e;
} catch (PaymentException $e) {
echo "支払に失敗しました";
echo "DBトランザクションをロールバックします";
throw $e;
}
}
private function payment($bool = false)
{
if ($bool) {
throw new PaymentException;
}
}
private function inventoryReservation($bool = false)
{
if ($bool) {
throw new StockException;
}
}
}
ExceptionCart.php
URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 18
【実習】オリジナルのExceptionを定義する
例外の定義とCartオブジェクトの利用
class OrderException extends Exception {}
class StockException extends OrderException {}
class PaymentException extends OrderException {}
$cart = new Cart;
echo "START";
try {
$cart->order();
} catch (OrderException $e) {
echo "注文に失敗しました";
var_dump($e->getTrace());
} catch (Exception $e) {
echo "想定外の例外が発生しました";
}
echo "END";
ExceptionCart.php
URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 19
【CM】アシアルスクール
URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 20
アシアル塾のご案内
1回3,000円でWeb技術を約90分学習できる格安の教育サービスです
• 60分の講義+30分の復習&質問タイム
主な対象
• IT業界やWeb業界で働いているプロの方の学習を応援します!
Webデザイナーの方大歓迎
• 技術を分かりやすく教えます
絶対理解保証キャンペーン実施中
• もし講義内容にご満足いただけなかった場合は返金いたします
(返金手数料のみ頂戴いたします)
URL
• http://www.asial.co.jp/school/juku.php
URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 21
アシアルスクールのご案内
Web関連技術を集中的かつ体系的に学べる研修サービスです
• 半日∼二日間の集中講義を中心に実施
• PHPやJavaScript、LinuxといったWeb関連技術が学べます
URL
• http://www.asial.co.jp/school/guide.php
例:PHP講座の学習ロードマップ
URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 22
企業研修のご案内
アシアルではWeb技術に関する企業研修を行っています
• 技術職採用の社員に向けた新人研修・中途採用者向け研修
• 総合職向けのWeb技術入門研修
主な実績
• グリー株式会社様
• 株式会社ドワンゴ様
• 株式会社朝日新聞社様
URL
• http://www.asial.co.jp/business/training/

More Related Content

What's hot

Php5 4勉強会
Php5 4勉強会Php5 4勉強会
Php5 4勉強会
Yuji Otani
 
06 オブジェクト指向の基礎
06 オブジェクト指向の基礎06 オブジェクト指向の基礎
06 オブジェクト指向の基礎
文樹 高橋
 
Web技術勉強会 20100925
Web技術勉強会 20100925Web技術勉強会 20100925
Web技術勉強会 20100925
龍一 田中
 
今から始める Lens/Prism
今から始める Lens/Prism今から始める Lens/Prism
今から始める Lens/Prism
Naoki Aoyama
 
「スピード」と「品質」を実現するPHP開発チームの取り組み~AngularJS+FuelPHP+AspectMock~
「スピード」と「品質」を実現するPHP開発チームの取り組み~AngularJS+FuelPHP+AspectMock~「スピード」と「品質」を実現するPHP開発チームの取り組み~AngularJS+FuelPHP+AspectMock~
「スピード」と「品質」を実現するPHP開発チームの取り組み~AngularJS+FuelPHP+AspectMock~
leverages_event
 
【SQLインジェクション対策】徳丸先生に怒られない、動的SQLの安全な組み立て方
【SQLインジェクション対策】徳丸先生に怒られない、動的SQLの安全な組み立て方【SQLインジェクション対策】徳丸先生に怒られない、動的SQLの安全な組み立て方
【SQLインジェクション対策】徳丸先生に怒られない、動的SQLの安全な組み立て方
kwatch
 
よいことも悪いこともぜんぶPHPが教えてくれた
よいことも悪いこともぜんぶPHPが教えてくれたよいことも悪いこともぜんぶPHPが教えてくれた
よいことも悪いこともぜんぶPHPが教えてくれた
Moriyoshi Koizumi
 
JavaScriptクイックスタート
JavaScriptクイックスタートJavaScriptクイックスタート
JavaScriptクイックスタート
Shumpei Shiraishi
 
Webシステム脆弱性LT資料
Webシステム脆弱性LT資料Webシステム脆弱性LT資料
Webシステム脆弱性LT資料
Tomohito Adachi
 
最強オブジェクト指向言語 JavaScript 再入門!
最強オブジェクト指向言語 JavaScript 再入門!最強オブジェクト指向言語 JavaScript 再入門!
最強オブジェクト指向言語 JavaScript 再入門!
Yuji Nojima
 
SlowQueryとの戦い
SlowQueryとの戦いSlowQueryとの戦い
SlowQueryとの戦い
Ken Gotoh
 
Getting started MySQL as Document Data Store
Getting started MySQL as Document Data StoreGetting started MySQL as Document Data Store
Getting started MySQL as Document Data Store
Chihiro Ito
 
Ruby 同好会宣言
Ruby 同好会宣言Ruby 同好会宣言
Ruby 同好会宣言
Yuya Takeyama
 
20091030cakephphandson 02
20091030cakephphandson 0220091030cakephphandson 02
20091030cakephphandson 02
Yusuke Ando
 
社内Java8勉強会 ラムダ式とストリームAPI
社内Java8勉強会 ラムダ式とストリームAPI社内Java8勉強会 ラムダ式とストリームAPI
社内Java8勉強会 ラムダ式とストリームAPI
Akihiro Ikezoe
 
ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2
ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2
ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2
Masatoshi Tada
 
jvmlang.daitokai 1.0.0 MinCamlJを作ってみた
jvmlang.daitokai 1.0.0 MinCamlJを作ってみたjvmlang.daitokai 1.0.0 MinCamlJを作ってみた
jvmlang.daitokai 1.0.0 MinCamlJを作ってみた
Kazuyoshi Kamitsukasa
 
Gen-Template-for-Perl
Gen-Template-for-PerlGen-Template-for-Perl
Gen-Template-for-Perl
nasneg
 
Scala の関数型プログラミングを支える技術
Scala の関数型プログラミングを支える技術Scala の関数型プログラミングを支える技術
Scala の関数型プログラミングを支える技術
Naoki Aoyama
 

What's hot (20)

Php5 4勉強会
Php5 4勉強会Php5 4勉強会
Php5 4勉強会
 
06 オブジェクト指向の基礎
06 オブジェクト指向の基礎06 オブジェクト指向の基礎
06 オブジェクト指向の基礎
 
Web技術勉強会 20100925
Web技術勉強会 20100925Web技術勉強会 20100925
Web技術勉強会 20100925
 
今から始める Lens/Prism
今から始める Lens/Prism今から始める Lens/Prism
今から始める Lens/Prism
 
「スピード」と「品質」を実現するPHP開発チームの取り組み~AngularJS+FuelPHP+AspectMock~
「スピード」と「品質」を実現するPHP開発チームの取り組み~AngularJS+FuelPHP+AspectMock~「スピード」と「品質」を実現するPHP開発チームの取り組み~AngularJS+FuelPHP+AspectMock~
「スピード」と「品質」を実現するPHP開発チームの取り組み~AngularJS+FuelPHP+AspectMock~
 
【SQLインジェクション対策】徳丸先生に怒られない、動的SQLの安全な組み立て方
【SQLインジェクション対策】徳丸先生に怒られない、動的SQLの安全な組み立て方【SQLインジェクション対策】徳丸先生に怒られない、動的SQLの安全な組み立て方
【SQLインジェクション対策】徳丸先生に怒られない、動的SQLの安全な組み立て方
 
よいことも悪いこともぜんぶPHPが教えてくれた
よいことも悪いこともぜんぶPHPが教えてくれたよいことも悪いこともぜんぶPHPが教えてくれた
よいことも悪いこともぜんぶPHPが教えてくれた
 
JavaScriptクイックスタート
JavaScriptクイックスタートJavaScriptクイックスタート
JavaScriptクイックスタート
 
Webシステム脆弱性LT資料
Webシステム脆弱性LT資料Webシステム脆弱性LT資料
Webシステム脆弱性LT資料
 
最強オブジェクト指向言語 JavaScript 再入門!
最強オブジェクト指向言語 JavaScript 再入門!最強オブジェクト指向言語 JavaScript 再入門!
最強オブジェクト指向言語 JavaScript 再入門!
 
SlowQueryとの戦い
SlowQueryとの戦いSlowQueryとの戦い
SlowQueryとの戦い
 
ちょっと詳しくJavaScript 第3回【prototype】
ちょっと詳しくJavaScript 第3回【prototype】ちょっと詳しくJavaScript 第3回【prototype】
ちょっと詳しくJavaScript 第3回【prototype】
 
Getting started MySQL as Document Data Store
Getting started MySQL as Document Data StoreGetting started MySQL as Document Data Store
Getting started MySQL as Document Data Store
 
Ruby 同好会宣言
Ruby 同好会宣言Ruby 同好会宣言
Ruby 同好会宣言
 
20091030cakephphandson 02
20091030cakephphandson 0220091030cakephphandson 02
20091030cakephphandson 02
 
社内Java8勉強会 ラムダ式とストリームAPI
社内Java8勉強会 ラムダ式とストリームAPI社内Java8勉強会 ラムダ式とストリームAPI
社内Java8勉強会 ラムダ式とストリームAPI
 
ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2
ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2
ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2
 
jvmlang.daitokai 1.0.0 MinCamlJを作ってみた
jvmlang.daitokai 1.0.0 MinCamlJを作ってみたjvmlang.daitokai 1.0.0 MinCamlJを作ってみた
jvmlang.daitokai 1.0.0 MinCamlJを作ってみた
 
Gen-Template-for-Perl
Gen-Template-for-PerlGen-Template-for-Perl
Gen-Template-for-Perl
 
Scala の関数型プログラミングを支える技術
Scala の関数型プログラミングを支える技術Scala の関数型プログラミングを支える技術
Scala の関数型プログラミングを支える技術
 

Similar to 【アシアル塾】PHPオブジェクト指向再入門・第三回Exceptionクラスによる例外処理

pecl-AOPの紹介
pecl-AOPの紹介pecl-AOPの紹介
pecl-AOPの紹介
Hiraku Nakano
 
はじめてのPowerShell
はじめてのPowerShellはじめてのPowerShell
はじめてのPowerShell
Trainocate Japan, Ltd.
 
20180123 power shell
20180123 power shell20180123 power shell
20180123 power shell
Trainocate Japan, Ltd.
 
「Html sql」で図書館hpにアクセスしてみよう
「Html sql」で図書館hpにアクセスしてみよう「Html sql」で図書館hpにアクセスしてみよう
「Html sql」で図書館hpにアクセスしてみよう
Kentaro Matsui
 
Javaプログラミング入門【第6回】
Javaプログラミング入門【第6回】Javaプログラミング入門【第6回】
Javaプログラミング入門【第6回】
Yukiko Kato
 
Cakephpstudy5 hacks jp
Cakephpstudy5 hacks jpCakephpstudy5 hacks jp
Cakephpstudy5 hacks jp
Hiroki Shimizu
 
ClassLoader Leak Patterns
ClassLoader Leak PatternsClassLoader Leak Patterns
ClassLoader Leak Patterns
nekop
 
90分間濃縮 PHPエラーの教室
90分間濃縮 PHPエラーの教室90分間濃縮 PHPエラーの教室
90分間濃縮 PHPエラーの教室
Yusuke Ando
 
SPL fukuokaphp_1
SPL fukuokaphp_1SPL fukuokaphp_1
SPL fukuokaphp_1
ichikaway
 
Ruby初級者向けレッスン 55回 ─── 例外
Ruby初級者向けレッスン 55回 ─── 例外Ruby初級者向けレッスン 55回 ─── 例外
Ruby初級者向けレッスン 55回 ─── 例外
higaki
 
Apache Struts2 における任意の Java メソッド実行の脆弱性
Apache Struts2 における任意の Java メソッド実行の脆弱性Apache Struts2 における任意の Java メソッド実行の脆弱性
Apache Struts2 における任意の Java メソッド実行の脆弱性
JPCERT Coordination Center
 
Ruby初級者向けレッスン 45回 ─── 例外
Ruby初級者向けレッスン 45回 ─── 例外Ruby初級者向けレッスン 45回 ─── 例外
Ruby初級者向けレッスン 45回 ─── 例外
higaki
 
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
JustSystems Corporation
 
Valhalla Update JJUG CCC Spring 2019
Valhalla Update JJUG CCC Spring 2019Valhalla Update JJUG CCC Spring 2019
Valhalla Update JJUG CCC Spring 2019
David Buck
 
Doctrineではじめるsymfony1.2開発
Doctrineではじめるsymfony1.2開発Doctrineではじめるsymfony1.2開発
Doctrineではじめるsymfony1.2開発
Katsuhiro Ogawa
 
Elixir入門「第1回:パターンマッチ&パイプでJSONパースアプリをサクっと書いてみる」【旧版】※新版あります
Elixir入門「第1回:パターンマッチ&パイプでJSONパースアプリをサクっと書いてみる」【旧版】※新版ありますElixir入門「第1回:パターンマッチ&パイプでJSONパースアプリをサクっと書いてみる」【旧版】※新版あります
Elixir入門「第1回:パターンマッチ&パイプでJSONパースアプリをサクっと書いてみる」【旧版】※新版あります
fukuoka.ex
 
Yahoo!ボックスAPI Hackday資料
Yahoo!ボックスAPI Hackday資料Yahoo!ボックスAPI Hackday資料
Yahoo!ボックスAPI Hackday資料
Yahoo!デベロッパーネットワーク
 
Kawaz的jQuery入門
Kawaz的jQuery入門Kawaz的jQuery入門
Kawaz的jQuery入門
Kohki Miki
 

Similar to 【アシアル塾】PHPオブジェクト指向再入門・第三回Exceptionクラスによる例外処理 (20)

pecl-AOPの紹介
pecl-AOPの紹介pecl-AOPの紹介
pecl-AOPの紹介
 
はじめてのPowerShell
はじめてのPowerShellはじめてのPowerShell
はじめてのPowerShell
 
20180123 power shell
20180123 power shell20180123 power shell
20180123 power shell
 
「Html sql」で図書館hpにアクセスしてみよう
「Html sql」で図書館hpにアクセスしてみよう「Html sql」で図書館hpにアクセスしてみよう
「Html sql」で図書館hpにアクセスしてみよう
 
Javaプログラミング入門【第6回】
Javaプログラミング入門【第6回】Javaプログラミング入門【第6回】
Javaプログラミング入門【第6回】
 
Cakephpstudy5 hacks jp
Cakephpstudy5 hacks jpCakephpstudy5 hacks jp
Cakephpstudy5 hacks jp
 
ClassLoader Leak Patterns
ClassLoader Leak PatternsClassLoader Leak Patterns
ClassLoader Leak Patterns
 
90分間濃縮 PHPエラーの教室
90分間濃縮 PHPエラーの教室90分間濃縮 PHPエラーの教室
90分間濃縮 PHPエラーの教室
 
Lithium Labo #1
Lithium Labo #1Lithium Labo #1
Lithium Labo #1
 
SPL fukuokaphp_1
SPL fukuokaphp_1SPL fukuokaphp_1
SPL fukuokaphp_1
 
Ruby初級者向けレッスン 55回 ─── 例外
Ruby初級者向けレッスン 55回 ─── 例外Ruby初級者向けレッスン 55回 ─── 例外
Ruby初級者向けレッスン 55回 ─── 例外
 
Apache Struts2 における任意の Java メソッド実行の脆弱性
Apache Struts2 における任意の Java メソッド実行の脆弱性Apache Struts2 における任意の Java メソッド実行の脆弱性
Apache Struts2 における任意の Java メソッド実行の脆弱性
 
実"戦"CakePHP Plugin
実"戦"CakePHP Plugin実"戦"CakePHP Plugin
実"戦"CakePHP Plugin
 
Ruby初級者向けレッスン 45回 ─── 例外
Ruby初級者向けレッスン 45回 ─── 例外Ruby初級者向けレッスン 45回 ─── 例外
Ruby初級者向けレッスン 45回 ─── 例外
 
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
 
Valhalla Update JJUG CCC Spring 2019
Valhalla Update JJUG CCC Spring 2019Valhalla Update JJUG CCC Spring 2019
Valhalla Update JJUG CCC Spring 2019
 
Doctrineではじめるsymfony1.2開発
Doctrineではじめるsymfony1.2開発Doctrineではじめるsymfony1.2開発
Doctrineではじめるsymfony1.2開発
 
Elixir入門「第1回:パターンマッチ&パイプでJSONパースアプリをサクっと書いてみる」【旧版】※新版あります
Elixir入門「第1回:パターンマッチ&パイプでJSONパースアプリをサクっと書いてみる」【旧版】※新版ありますElixir入門「第1回:パターンマッチ&パイプでJSONパースアプリをサクっと書いてみる」【旧版】※新版あります
Elixir入門「第1回:パターンマッチ&パイプでJSONパースアプリをサクっと書いてみる」【旧版】※新版あります
 
Yahoo!ボックスAPI Hackday資料
Yahoo!ボックスAPI Hackday資料Yahoo!ボックスAPI Hackday資料
Yahoo!ボックスAPI Hackday資料
 
Kawaz的jQuery入門
Kawaz的jQuery入門Kawaz的jQuery入門
Kawaz的jQuery入門
 

More from アシアル株式会社

MonacaとEducation活動の紹介
MonacaとEducation活動の紹介MonacaとEducation活動の紹介
MonacaとEducation活動の紹介
アシアル株式会社
 
PWA 4 Business
PWA 4 BusinessPWA 4 Business
PWA 4 Business
アシアル株式会社
 
Monacaによるモバイルアプリ開発ことはじめ
Monacaによるモバイルアプリ開発ことはじめMonacaによるモバイルアプリ開発ことはじめ
Monacaによるモバイルアプリ開発ことはじめ
アシアル株式会社
 
kintone 連携スマホアプリの開発・配布体験
kintone 連携スマホアプリの開発・配布体験kintone 連携スマホアプリの開発・配布体験
kintone 連携スマホアプリの開発・配布体験
アシアル株式会社
 
JINS MEME DEVELOPER HANDS-ON (Monaca / Apache Cordova編)
JINS MEME DEVELOPER HANDS-ON (Monaca / Apache Cordova編)JINS MEME DEVELOPER HANDS-ON (Monaca / Apache Cordova編)
JINS MEME DEVELOPER HANDS-ON (Monaca / Apache Cordova編)
アシアル株式会社
 
書籍『Monacaで学ぶはじめてのプログラミング』発展資料(試験問題アプリ編)
書籍『Monacaで学ぶはじめてのプログラミング』発展資料(試験問題アプリ編)書籍『Monacaで学ぶはじめてのプログラミング』発展資料(試験問題アプリ編)
書籍『Monacaで学ぶはじめてのプログラミング』発展資料(試験問題アプリ編)
アシアル株式会社
 
書籍『Monacaで学ぶはじめてのプログラミング』 講義スライド第2弾(体験版)
書籍『Monacaで学ぶはじめてのプログラミング』 講義スライド第2弾(体験版)書籍『Monacaで学ぶはじめてのプログラミング』 講義スライド第2弾(体験版)
書籍『Monacaで学ぶはじめてのプログラミング』 講義スライド第2弾(体験版)
アシアル株式会社
 
Onsen UI 2 開発における JS フレームワーク衝突事例集
Onsen UI 2 開発における JS フレームワーク衝突事例集Onsen UI 2 開発における JS フレームワーク衝突事例集
Onsen UI 2 開発における JS フレームワーク衝突事例集
アシアル株式会社
 
Web標準技術で iOS、Android両対応アプリを開発
Web標準技術でiOS、Android両対応アプリを開発Web標準技術でiOS、Android両対応アプリを開発
Web標準技術で iOS、Android両対応アプリを開発
アシアル株式会社
 
書籍『Monacaで学ぶはじめてのプログラミング』 講義スライド(体験版)
書籍『Monacaで学ぶはじめてのプログラミング』 講義スライド(体験版)書籍『Monacaで学ぶはじめてのプログラミング』 講義スライド(体験版)
書籍『Monacaで学ぶはじめてのプログラミング』 講義スライド(体験版)
アシアル株式会社
 
Cordovaの特徴と開発手法概要
Cordovaの特徴と開発手法概要Cordovaの特徴と開発手法概要
Cordovaの特徴と開発手法概要
アシアル株式会社
 
Html5/JSモバイルアプリ最前線
Html5/JSモバイルアプリ最前線Html5/JSモバイルアプリ最前線
Html5/JSモバイルアプリ最前線
アシアル株式会社
 
Onsen UI の最近とこれから 〜 国内サポートはじめました
Onsen UI の最近とこれから 〜 国内サポートはじめましたOnsen UI の最近とこれから 〜 国内サポートはじめました
Onsen UI の最近とこれから 〜 国内サポートはじめました
アシアル株式会社
 
Monaca事例から学ぶHTML5モバイルアプリの活用ポイント
Monaca事例から学ぶHTML5モバイルアプリの活用ポイントMonaca事例から学ぶHTML5モバイルアプリの活用ポイント
Monaca事例から学ぶHTML5モバイルアプリの活用ポイント
アシアル株式会社
 
最新UIフレームワーク Onsen UI2で カッコイイWordPress連携アプリを作る方法
最新UIフレームワーク Onsen UI2でカッコイイWordPress連携アプリを作る方法最新UIフレームワーク Onsen UI2でカッコイイWordPress連携アプリを作る方法
最新UIフレームワーク Onsen UI2で カッコイイWordPress連携アプリを作る方法
アシアル株式会社
 
Gartner summit 2016
Gartner summit 2016Gartner summit 2016
Gartner summit 2016
アシアル株式会社
 
モバイル用Webフレームワーク最前線
モバイル用Webフレームワーク最前線モバイル用Webフレームワーク最前線
モバイル用Webフレームワーク最前線
アシアル株式会社
 
Monacaソリューションセミナー20160621
Monacaソリューションセミナー20160621Monacaソリューションセミナー20160621
Monacaソリューションセミナー20160621
アシアル株式会社
 
20160308seminar2
20160308seminar220160308seminar2
20160308seminar2
アシアル株式会社
 
Nifty cloud mbaas
Nifty cloud mbaasNifty cloud mbaas
Nifty cloud mbaas
アシアル株式会社
 

More from アシアル株式会社 (20)

MonacaとEducation活動の紹介
MonacaとEducation活動の紹介MonacaとEducation活動の紹介
MonacaとEducation活動の紹介
 
PWA 4 Business
PWA 4 BusinessPWA 4 Business
PWA 4 Business
 
Monacaによるモバイルアプリ開発ことはじめ
Monacaによるモバイルアプリ開発ことはじめMonacaによるモバイルアプリ開発ことはじめ
Monacaによるモバイルアプリ開発ことはじめ
 
kintone 連携スマホアプリの開発・配布体験
kintone 連携スマホアプリの開発・配布体験kintone 連携スマホアプリの開発・配布体験
kintone 連携スマホアプリの開発・配布体験
 
JINS MEME DEVELOPER HANDS-ON (Monaca / Apache Cordova編)
JINS MEME DEVELOPER HANDS-ON (Monaca / Apache Cordova編)JINS MEME DEVELOPER HANDS-ON (Monaca / Apache Cordova編)
JINS MEME DEVELOPER HANDS-ON (Monaca / Apache Cordova編)
 
書籍『Monacaで学ぶはじめてのプログラミング』発展資料(試験問題アプリ編)
書籍『Monacaで学ぶはじめてのプログラミング』発展資料(試験問題アプリ編)書籍『Monacaで学ぶはじめてのプログラミング』発展資料(試験問題アプリ編)
書籍『Monacaで学ぶはじめてのプログラミング』発展資料(試験問題アプリ編)
 
書籍『Monacaで学ぶはじめてのプログラミング』 講義スライド第2弾(体験版)
書籍『Monacaで学ぶはじめてのプログラミング』 講義スライド第2弾(体験版)書籍『Monacaで学ぶはじめてのプログラミング』 講義スライド第2弾(体験版)
書籍『Monacaで学ぶはじめてのプログラミング』 講義スライド第2弾(体験版)
 
Onsen UI 2 開発における JS フレームワーク衝突事例集
Onsen UI 2 開発における JS フレームワーク衝突事例集Onsen UI 2 開発における JS フレームワーク衝突事例集
Onsen UI 2 開発における JS フレームワーク衝突事例集
 
Web標準技術で iOS、Android両対応アプリを開発
Web標準技術でiOS、Android両対応アプリを開発Web標準技術でiOS、Android両対応アプリを開発
Web標準技術で iOS、Android両対応アプリを開発
 
書籍『Monacaで学ぶはじめてのプログラミング』 講義スライド(体験版)
書籍『Monacaで学ぶはじめてのプログラミング』 講義スライド(体験版)書籍『Monacaで学ぶはじめてのプログラミング』 講義スライド(体験版)
書籍『Monacaで学ぶはじめてのプログラミング』 講義スライド(体験版)
 
Cordovaの特徴と開発手法概要
Cordovaの特徴と開発手法概要Cordovaの特徴と開発手法概要
Cordovaの特徴と開発手法概要
 
Html5/JSモバイルアプリ最前線
Html5/JSモバイルアプリ最前線Html5/JSモバイルアプリ最前線
Html5/JSモバイルアプリ最前線
 
Onsen UI の最近とこれから 〜 国内サポートはじめました
Onsen UI の最近とこれから 〜 国内サポートはじめましたOnsen UI の最近とこれから 〜 国内サポートはじめました
Onsen UI の最近とこれから 〜 国内サポートはじめました
 
Monaca事例から学ぶHTML5モバイルアプリの活用ポイント
Monaca事例から学ぶHTML5モバイルアプリの活用ポイントMonaca事例から学ぶHTML5モバイルアプリの活用ポイント
Monaca事例から学ぶHTML5モバイルアプリの活用ポイント
 
最新UIフレームワーク Onsen UI2で カッコイイWordPress連携アプリを作る方法
最新UIフレームワーク Onsen UI2でカッコイイWordPress連携アプリを作る方法最新UIフレームワーク Onsen UI2でカッコイイWordPress連携アプリを作る方法
最新UIフレームワーク Onsen UI2で カッコイイWordPress連携アプリを作る方法
 
Gartner summit 2016
Gartner summit 2016Gartner summit 2016
Gartner summit 2016
 
モバイル用Webフレームワーク最前線
モバイル用Webフレームワーク最前線モバイル用Webフレームワーク最前線
モバイル用Webフレームワーク最前線
 
Monacaソリューションセミナー20160621
Monacaソリューションセミナー20160621Monacaソリューションセミナー20160621
Monacaソリューションセミナー20160621
 
20160308seminar2
20160308seminar220160308seminar2
20160308seminar2
 
Nifty cloud mbaas
Nifty cloud mbaasNifty cloud mbaas
Nifty cloud mbaas
 

Recently uploaded

論文紹介:Task-aligned Part-aware Panoptic Segmentation through Joint Object-Part ...
論文紹介:Task-aligned Part-aware Panoptic Segmentation through Joint Object-Part ...論文紹介:Task-aligned Part-aware Panoptic Segmentation through Joint Object-Part ...
論文紹介:Task-aligned Part-aware Panoptic Segmentation through Joint Object-Part ...
Toru Tamaki
 
論文紹介:BAM-DETR: Boundary-Aligned Moment Detection Transformer for Temporal Sen...
論文紹介:BAM-DETR: Boundary-Aligned Moment Detection Transformer for Temporal Sen...論文紹介:BAM-DETR: Boundary-Aligned Moment Detection Transformer for Temporal Sen...
論文紹介:BAM-DETR: Boundary-Aligned Moment Detection Transformer for Temporal Sen...
Toru Tamaki
 
【AI論文解説】クラスタリングベースアプローチによる大規模データセット自動キュレーション
【AI論文解説】クラスタリングベースアプローチによる大規模データセット自動キュレーション【AI論文解説】クラスタリングベースアプローチによる大規模データセット自動キュレーション
【AI論文解説】クラスタリングベースアプローチによる大規模データセット自動キュレーション
Sony - Neural Network Libraries
 
最速の組織を目指して全社で大規模スクラムを導入してみた話 #dxd2024 #medicalforce
最速の組織を目指して全社で大規模スクラムを導入してみた話 #dxd2024 #medicalforce最速の組織を目指して全社で大規模スクラムを導入してみた話 #dxd2024 #medicalforce
最速の組織を目指して全社で大規模スクラムを導入してみた話 #dxd2024 #medicalforce
chisatotakane
 
20240717_IoTLT_vol113_kitazaki_v1___.pdf
20240717_IoTLT_vol113_kitazaki_v1___.pdf20240717_IoTLT_vol113_kitazaki_v1___.pdf
20240717_IoTLT_vol113_kitazaki_v1___.pdf
Ayachika Kitazaki
 
Matsuo-Iwasawa Lab. Research unit Introduction
Matsuo-Iwasawa Lab. Research unit IntroductionMatsuo-Iwasawa Lab. Research unit Introduction
Matsuo-Iwasawa Lab. Research unit Introduction
Matsuo Lab
 
Imitation learning for robotics 勉強会資料(20240701)
Imitation learning for robotics 勉強会資料(20240701)Imitation learning for robotics 勉強会資料(20240701)
Imitation learning for robotics 勉強会資料(20240701)
Natsutani Minoru
 
【JSAI2024】J-NER大規模言語モデルのための固有表現認識における拡張固有表現階層を考慮したベンチマークデータセット.pdf
【JSAI2024】J-NER大規模言語モデルのための固有表現認識における拡張固有表現階層を考慮したベンチマークデータセット.pdf【JSAI2024】J-NER大規模言語モデルのための固有表現認識における拡張固有表現階層を考慮したベンチマークデータセット.pdf
【JSAI2024】J-NER大規模言語モデルのための固有表現認識における拡張固有表現階層を考慮したベンチマークデータセット.pdf
ARISE analytics
 
Matsuo-Iwasawa lab. Research Unit Introduction
Matsuo-Iwasawa lab. Research Unit IntroductionMatsuo-Iwasawa lab. Research Unit Introduction
Matsuo-Iwasawa lab. Research Unit Introduction
Matsuo Lab
 
"ros2rapper", Hardware implimentation of ROS2 communication Protocol without ...
"ros2rapper", Hardware implimentation of ROS2 communication Protocol without ..."ros2rapper", Hardware implimentation of ROS2 communication Protocol without ...
"ros2rapper", Hardware implimentation of ROS2 communication Protocol without ...
たけおか しょうぞう
 
Matsuo-Iwasawa Lab. | Research unit Introduction
Matsuo-Iwasawa Lab. | Research unit IntroductionMatsuo-Iwasawa Lab. | Research unit Introduction
Matsuo-Iwasawa Lab. | Research unit Introduction
Matsuo Lab
 
Kyndryl Developer Services のご紹介 2024年7月
Kyndryl Developer Services のご紹介  2024年7月Kyndryl Developer Services のご紹介  2024年7月
Kyndryl Developer Services のご紹介 2024年7月
Takayuki Nakayama
 
Developer IO 2024 Odyssey SAMを応用したコンピュータビジョンの話
Developer IO 2024 Odyssey  SAMを応用したコンピュータビジョンの話Developer IO 2024 Odyssey  SAMを応用したコンピュータビジョンの話
Developer IO 2024 Odyssey SAMを応用したコンピュータビジョンの話
Shinichi Hirauchi
 
LoRaWAN AI Image Sensorエンドデバイス AIG01カタログ
LoRaWAN AI Image Sensorエンドデバイス AIG01カタログLoRaWAN AI Image Sensorエンドデバイス AIG01カタログ
LoRaWAN AI Image Sensorエンドデバイス AIG01カタログ
CRI Japan, Inc.
 
【AI論文解説】LLMの事前学習をvisionに適用する手法Autoregressive Image Models
【AI論文解説】LLMの事前学習をvisionに適用する手法Autoregressive Image Models【AI論文解説】LLMの事前学習をvisionに適用する手法Autoregressive Image Models
【AI論文解説】LLMの事前学習をvisionに適用する手法Autoregressive Image Models
Sony - Neural Network Libraries
 

Recently uploaded (15)

論文紹介:Task-aligned Part-aware Panoptic Segmentation through Joint Object-Part ...
論文紹介:Task-aligned Part-aware Panoptic Segmentation through Joint Object-Part ...論文紹介:Task-aligned Part-aware Panoptic Segmentation through Joint Object-Part ...
論文紹介:Task-aligned Part-aware Panoptic Segmentation through Joint Object-Part ...
 
論文紹介:BAM-DETR: Boundary-Aligned Moment Detection Transformer for Temporal Sen...
論文紹介:BAM-DETR: Boundary-Aligned Moment Detection Transformer for Temporal Sen...論文紹介:BAM-DETR: Boundary-Aligned Moment Detection Transformer for Temporal Sen...
論文紹介:BAM-DETR: Boundary-Aligned Moment Detection Transformer for Temporal Sen...
 
【AI論文解説】クラスタリングベースアプローチによる大規模データセット自動キュレーション
【AI論文解説】クラスタリングベースアプローチによる大規模データセット自動キュレーション【AI論文解説】クラスタリングベースアプローチによる大規模データセット自動キュレーション
【AI論文解説】クラスタリングベースアプローチによる大規模データセット自動キュレーション
 
最速の組織を目指して全社で大規模スクラムを導入してみた話 #dxd2024 #medicalforce
最速の組織を目指して全社で大規模スクラムを導入してみた話 #dxd2024 #medicalforce最速の組織を目指して全社で大規模スクラムを導入してみた話 #dxd2024 #medicalforce
最速の組織を目指して全社で大規模スクラムを導入してみた話 #dxd2024 #medicalforce
 
20240717_IoTLT_vol113_kitazaki_v1___.pdf
20240717_IoTLT_vol113_kitazaki_v1___.pdf20240717_IoTLT_vol113_kitazaki_v1___.pdf
20240717_IoTLT_vol113_kitazaki_v1___.pdf
 
Matsuo-Iwasawa Lab. Research unit Introduction
Matsuo-Iwasawa Lab. Research unit IntroductionMatsuo-Iwasawa Lab. Research unit Introduction
Matsuo-Iwasawa Lab. Research unit Introduction
 
Imitation learning for robotics 勉強会資料(20240701)
Imitation learning for robotics 勉強会資料(20240701)Imitation learning for robotics 勉強会資料(20240701)
Imitation learning for robotics 勉強会資料(20240701)
 
【JSAI2024】J-NER大規模言語モデルのための固有表現認識における拡張固有表現階層を考慮したベンチマークデータセット.pdf
【JSAI2024】J-NER大規模言語モデルのための固有表現認識における拡張固有表現階層を考慮したベンチマークデータセット.pdf【JSAI2024】J-NER大規模言語モデルのための固有表現認識における拡張固有表現階層を考慮したベンチマークデータセット.pdf
【JSAI2024】J-NER大規模言語モデルのための固有表現認識における拡張固有表現階層を考慮したベンチマークデータセット.pdf
 
Matsuo-Iwasawa lab. Research Unit Introduction
Matsuo-Iwasawa lab. Research Unit IntroductionMatsuo-Iwasawa lab. Research Unit Introduction
Matsuo-Iwasawa lab. Research Unit Introduction
 
"ros2rapper", Hardware implimentation of ROS2 communication Protocol without ...
"ros2rapper", Hardware implimentation of ROS2 communication Protocol without ..."ros2rapper", Hardware implimentation of ROS2 communication Protocol without ...
"ros2rapper", Hardware implimentation of ROS2 communication Protocol without ...
 
Matsuo-Iwasawa Lab. | Research unit Introduction
Matsuo-Iwasawa Lab. | Research unit IntroductionMatsuo-Iwasawa Lab. | Research unit Introduction
Matsuo-Iwasawa Lab. | Research unit Introduction
 
Kyndryl Developer Services のご紹介 2024年7月
Kyndryl Developer Services のご紹介  2024年7月Kyndryl Developer Services のご紹介  2024年7月
Kyndryl Developer Services のご紹介 2024年7月
 
Developer IO 2024 Odyssey SAMを応用したコンピュータビジョンの話
Developer IO 2024 Odyssey  SAMを応用したコンピュータビジョンの話Developer IO 2024 Odyssey  SAMを応用したコンピュータビジョンの話
Developer IO 2024 Odyssey SAMを応用したコンピュータビジョンの話
 
LoRaWAN AI Image Sensorエンドデバイス AIG01カタログ
LoRaWAN AI Image Sensorエンドデバイス AIG01カタログLoRaWAN AI Image Sensorエンドデバイス AIG01カタログ
LoRaWAN AI Image Sensorエンドデバイス AIG01カタログ
 
【AI論文解説】LLMの事前学習をvisionに適用する手法Autoregressive Image Models
【AI論文解説】LLMの事前学習をvisionに適用する手法Autoregressive Image Models【AI論文解説】LLMの事前学習をvisionに適用する手法Autoregressive Image Models
【AI論文解説】LLMの事前学習をvisionに適用する手法Autoregressive Image Models
 

【アシアル塾】PHPオブジェクト指向再入門・第三回Exceptionクラスによる例外処理

  • 1. URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 1 PHPオブジェクト指向再入門 Exceptionによる例外処理 1回3,000円のWeb技術教育・アシアル塾 http://www.asial.co.jp/school/juku.php
  • 2. URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 2 本講座の目的 本講座の目的 • 書籍だけでは理解することが難しいオブジェクト指向の技術や考え方を、ひとつずつ理解していきます。 受講対象者 • プログラミングの基本的な手法である構造化プログラミング(順次・反復・分岐)や変数・関数の仕組みを理 解している方 第三回目の目標 1. Exceptionを利用した例外処理の仕組みを理解する 2. 継承を利用してオリジナルのExceptionを定義する
  • 3. URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 3 Exceptionと例外処理
  • 4. URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 4 Exceptionとは Exeptionとは • 「例外」をオブジェクトとして管理するためのクラスです Exceptionはれっきとしたクラスなのでインスタンス化したり継承することができます。 • Exceptionオブジェクトを扱うための構文(try-catch)と組み合わせて利用できます 例外とは何か? • 例外的な状況 データベースサーバーが応答しなくなった 注文処理の実行中に在庫がなくなってしまった 外部APIが応答しなくなった ディスク容量があふれてプログラムが正常に処理できなくなった Exceptionによる例外処理 • 例外的な状況に陥ったタイミングで「例外を投げる(スロー)」ことを行います 例:throw new exception('例外エラーが発生しました'); – 「throw」という構文に Exceptionオブジェクトを渡します。 – Exceptionオブジェクトはコンストラクタでエラーメッセージを定義できます。
  • 5. URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 5 エラー処理方法 エラー処理方法 • 関数の返り値によるエラー処理 エラー発生時にreturnでfalseや0、エラーコードなどを返します • 例外によるエラー処理 例外発生時に、throwで例外(Exceptionオブジェクト)を投げます 例外処理のメリット • 関数の返り値の型を汚さずに済みます 例としてPHPの関数file_get_contents()関数は取得に成功した場合はデータをstring型で返すのですががエラー 時はboolean型のfalseを返すようになっており、返り値の型が統一できていません。 • 関数を利用する側がif文によるエラーチェックから解放されます • 例外発生時の処理をcatchブロックでまとめて記述できます • 正常系の処理と例外発生時の処理が分離できるため可読性が高まります
  • 6. URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 6 【実習】Exceptionを投げる Exceptionをインスタンス化してthrowで投げてみましょう try-catch構文を利用してExceptionをcatchしてみましょう <?php throw new Exception("はじめてのException"); Exception.php <?php try { echo "try開始"; throw new Exception("はじめてのException"); echo "try終了"; } catch (Exception $e) { echo $e->getMessage(); }
  • 7. URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 7 throwとtry-catch try-catch構文を使わなかった場合 • throwしたExceptionがキャッチされなかった場合、最終的にPHPがFatalエラーとして処理します try-catch構文を使った場合 • throwのタイミングでtryブロックの後続の処理が中断されます 中断後はcatchブロックの中の処理が実行されます • catch (Exception $e) について Exceptionの記述はタイプヒンティングのようなもので、catch可能なオブジェクトのクラスを指定しています – この場合はExceptionクラスかその子クラスのオブジェクトをキャッチします キャッチしたオブジェクトは$eとして参照できるようになります – $exceptionと記述した場合は$exceptionとして参照できるようになります
  • 8. URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 8 Exceptionの継承 Exceptionの継承 • Exceptionはクラスなので継承してオリジナルの例外を作成することができます 例:データベース接続に関する例外や注文に関する例外など • PHPではSPLとしてExceptionを継承した例外が用意されています http://php.net/manual/ja/spl.exceptions.php RuntimeException (実行時例外) – OutOfBoundsException:有効ではないキーを参照した場合にスローされる例外 – OverflowException:コンテナに要素を追加して れた場合にスローされる例外 » ※コンテナは配列やオブジェクトなどの総称 – UnderflowException:空のコンテナの要素を削除しようとした場合にスローされる例外 – RangeException:範囲エラーが発生した場合にスローされる例外 – UnexpectedValueException:期待していない値の際にスローされる例外 LogicException(コードの検査や本来起こりえない状況の対応に使う例外) – 省略 • PDOが利用するPDOExceptionはRuntimeException を継承しています http://php.net/manual/ja/class.pdoexception.php • フレームワークでも例外を用意している場合があります http://book.cakephp.org/2.0/ja/development/exceptions.html
  • 9. URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 9 複数のcatch 複数のcatch • catchは複数用意することができます • 例えば、まず「RangeException」をcatchしてそれ以外を「RuntimeException」それでもcatchできないも のは「Exception」としてcatchすることができます。 try { $item->setStock(-1); } catch (RangeException $e) { echo "RangeExceptionが発生しました"; } catch (RuntimeException $e) { echo "RuntimeExceptionが発生しました"; } catch (Exception $e) { echo "Exceptionが発生しました"; }
  • 10. URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 10 Exceptionクラスの諸機能 Exceptionクラスの諸機能 • getMessage()メソッド 例外メッセージを取得します • getCode()メソッド 例外コードを取得します • getTrace()メソッド スタックトレースを取得します – 例外の発生した個所や呼び出し元情報を確認できます Exceptionオブジェクトの名前を確認する方法 • get_class()関数 オブジェクトのクラス名を取得します – Exceptionに限らず利用可能です
  • 11. URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 11 【実習】ItemクラスのメソッドからExceptionを投げる ItemクラスのメソッドからExceptionを投げる <?php class Item { private $stock = 0; public function setStock($amount) { if (is_int($amount)) { if ($amount >= 0) { $this->stock = $amount; return "在庫を" . $this->stock . "に更新しました"; } else { throw new RangeException('負数による在庫数指定'); } } else { throw new UnexpectedValueException("数値(int)以外の在庫数指定"); } } } ExceptionItem.php
  • 12. URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 12 【実習】Exceptionを複数のcatchで捉える Exceptionを複数のcatchで捉える • catch後の処理が同じ場合、個別にcatchする必要はありません try { $item = new Item(); $result = $item->setStock(99); echo $result; } catch (RangeException $e) { echo get_class($e) . "が発生しました"; echo $e->getMessage(); } catch (UnexpectedValueException $e) { echo get_class($e) . "が発生しました"; echo $e->getMessage(); } catch (RuntimeException $e) { echo get_class($e) . "が発生しました"; echo $e->getMessage(); } catch (Exception $e) { echo get_class($e) . "が発生しました"; echo $e->getMessage(); } ExceptionItem.php
  • 13. URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 13 PHPのエラーとException
  • 14. URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 14 PHPのエラーを例外として扱う PHPのエラーをExceptionとして扱う • PHPにはNoticeやWarningといったエラーが用意されています • NoticeやWarningを例外として扱う方法を確認していきましょう set_error_handler()関数 • PHPのエラーが発生した時の処理を設定するための関数です • エラー発生時の処理としてExceptionを投げる処理を登録します ExceptionはErrorExceptionというPHPで定義済みの例外を利用します function exception_error_handler($errno, $errstr, $errfile, $errline ) { throw new ErrorException($errstr, 0, $errno, $errfile, $errline); } set_error_handler("exception_error_handler"); /* 例外を発生させます */ try { echo $array['foo']; } catch (ErrorException $e) { echo $e->getMessage(); } 参考:http://php.net/manual/ja/class.errorexception.php
  • 15. URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 15 finallyブロック finallyブロック • PHP5.5以降からはtry-catch構文でfinallyブロックを記述することができます。 • finallyブロックに記述した処理は例外の発生にかかわらず実行されます また途中でreturnを実行した場合でも実行されます <?php try { throw new Exception("foo"); } catch (Exception $e) { echo $e->getMessage(); return; } finally { echo "hoge"; } echo "fuga";
  • 16. URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 16 【応用課題】Exceptionの継承とネストしたtry-catch
  • 17. URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 17 【実習】オリジナルのExceptionを定義する Cartクラスの定義 <?php class Cart { public function order() { try { echo "注文処理を行います"; echo "DBトランザクションを開始します"; $this->inventoryReservation(true); $this->payment(); echo "DBトランザクションをコミットします"; } catch (StockException $e) { echo "在庫の引き当てに失敗しました"; echo "DBトランザクションをロールバックします"; throw $e; } catch (PaymentException $e) { echo "支払に失敗しました"; echo "DBトランザクションをロールバックします"; throw $e; } } private function payment($bool = false) { if ($bool) { throw new PaymentException; } } private function inventoryReservation($bool = false) { if ($bool) { throw new StockException; } } } ExceptionCart.php
  • 18. URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 18 【実習】オリジナルのExceptionを定義する 例外の定義とCartオブジェクトの利用 class OrderException extends Exception {} class StockException extends OrderException {} class PaymentException extends OrderException {} $cart = new Cart; echo "START"; try { $cart->order(); } catch (OrderException $e) { echo "注文に失敗しました"; var_dump($e->getTrace()); } catch (Exception $e) { echo "想定外の例外が発生しました"; } echo "END"; ExceptionCart.php
  • 19. URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 19 【CM】アシアルスクール
  • 20. URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 20 アシアル塾のご案内 1回3,000円でWeb技術を約90分学習できる格安の教育サービスです • 60分の講義+30分の復習&質問タイム 主な対象 • IT業界やWeb業界で働いているプロの方の学習を応援します! Webデザイナーの方大歓迎 • 技術を分かりやすく教えます 絶対理解保証キャンペーン実施中 • もし講義内容にご満足いただけなかった場合は返金いたします (返金手数料のみ頂戴いたします) URL • http://www.asial.co.jp/school/juku.php
  • 21. URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 21 アシアルスクールのご案内 Web関連技術を集中的かつ体系的に学べる研修サービスです • 半日∼二日間の集中講義を中心に実施 • PHPやJavaScript、LinuxといったWeb関連技術が学べます URL • http://www.asial.co.jp/school/guide.php 例:PHP講座の学習ロードマップ
  • 22. URL : http://www.asial.co.jp/ │ Copyright © Asial Corporation. All Rights Reserved. │ 22 企業研修のご案内 アシアルではWeb技術に関する企業研修を行っています • 技術職採用の社員に向けた新人研修・中途採用者向け研修 • 総合職向けのWeb技術入門研修 主な実績 • グリー株式会社様 • 株式会社ドワンゴ様 • 株式会社朝日新聞社様 URL • http://www.asial.co.jp/business/training/