SlideShare uma empresa Scribd logo
1 de 22
Baixar para ler offline
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/

Mais conteúdo relacionado

Mais procurados

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/PrismNaoki 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 StoreChihiro Ito
 
Ruby 同好会宣言
Ruby 同好会宣言Ruby 同好会宣言
Ruby 同好会宣言Yuya Takeyama
 
20091030cakephphandson 02
20091030cakephphandson 0220091030cakephphandson 02
20091030cakephphandson 02Yusuke Ando
 
社内Java8勉強会 ラムダ式とストリームAPI
社内Java8勉強会 ラムダ式とストリームAPI社内Java8勉強会 ラムダ式とストリームAPI
社内Java8勉強会 ラムダ式とストリームAPIAkihiro Ikezoe
 
ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2
ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2
ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2Masatoshi 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-Perlnasneg
 
Scala の関数型プログラミングを支える技術
Scala の関数型プログラミングを支える技術Scala の関数型プログラミングを支える技術
Scala の関数型プログラミングを支える技術Naoki Aoyama
 

Mais procurados (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 の関数型プログラミングを支える技術
 

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

「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 jpHiroki Shimizu
 
ClassLoader Leak Patterns
ClassLoader Leak PatternsClassLoader Leak Patterns
ClassLoader Leak Patternsnekop
 
90分間濃縮 PHPエラーの教室
90分間濃縮 PHPエラーの教室90分間濃縮 PHPエラーの教室
90分間濃縮 PHPエラーの教室Yusuke Ando
 
SPL fukuokaphp_1
SPL fukuokaphp_1SPL fukuokaphp_1
SPL fukuokaphp_1ichikaway
 
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 2019David 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
 
Kawaz的jQuery入門
Kawaz的jQuery入門Kawaz的jQuery入門
Kawaz的jQuery入門Kohki Miki
 

Semelhante a 【アシアル塾】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入門
 

Mais de アシアル株式会社

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で学ぶはじめてのプログラミング』 講義スライド(体験版)アシアル株式会社
 
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連携アプリを作る方法アシアル株式会社
 
モバイル用Webフレームワーク最前線
モバイル用Webフレームワーク最前線モバイル用Webフレームワーク最前線
モバイル用Webフレームワーク最前線アシアル株式会社
 
Monacaソリューションセミナー20160621
Monacaソリューションセミナー20160621Monacaソリューションセミナー20160621
Monacaソリューションセミナー20160621アシアル株式会社
 

Mais de アシアル株式会社 (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
 

Último

Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Hiroshi Tomioka
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...Toru Tamaki
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video UnderstandingToru Tamaki
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsWSO2
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイスCRI Japan, Inc.
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Gamesatsushi061452
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルCRI Japan, Inc.
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptxsn679259
 

Último (12)

Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 

【アシアル塾】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/