php初心者です
try~catchをわかりやすく教えてください
throw new Exceptionが出現したら、catchまでの処理をしないでとばすとゆうことですか?
try~catchを抜けたら、他の処理は普通に実行されるのでしょうか?
try~catchのカッコ{で囲む範囲は大きくしたほうがいいでしょうか?(大きく囲むと処理スピードおそくなりますか?)
try {
throw new Exception('エラーが発生しました');
print "hoge";
} catch (Exception $e) {
echo '例外発生', $e->getMessage(), "\n";
}
print "foo";
よろしくお願いします
No.1ベストアンサー
- 回答日時:
>> throw new Exceptionが出現したら、catchまでの処理をしないでとばすとゆうことですか?
はい。
代入において右オペランドで例外が発生した場合、その代入文は無効になります。
代入せずに直接echoしようとした場合も同様に、そのecho文は無効になります。
例
function hoge() {
throw new Exception('エラーが発生しました');
return 'hoge';
}
try {
throw new Exception('エラーが発生しました');
echo hoge(); // hoge() は実行されるがecho文は実行されない
} catch (Exception $e) {
echo '例外発生', $e->getMessage(), "\n";
}
>> try~catchを抜けたら、他の処理は普通に実行されるのでしょうか?
はい。
>> try~catchのカッコ{で囲む範囲は大きくしたほうがいいでしょうか?(大きく囲むと処理スピードおそくなりますか?)
処理速度云々ではなく、 "意味" で囲う範囲を定めてください。
例
/* 初期化処理 */
$a = ...;
$b = ...;
/* ユーザーからの入力を受け取る */
try {
if (!isset($_POST['input']) || !is_string($_POST['input'])) {
throw new RuntimeException('パラメータが不正です');
}
if (preg_match('//u', $_POST['input']) === false) {
throw new RuntimeException('不正なエンコーディングです');
}
if ($_POST['input'] === '') {
throw new RuntimeException('1文字以上入力してください');
}
echo htmlspecialchars($_POST['input'], ENT_QUOTES, 'UTF-8');
} catch (RuntimeException $e) {
printf("例外発生: %s\n", $e->getMessage());
}
上記の例でも使用していますが、可能な限りExceptionクラスの代わりにその継承クラスである「RuntimeException」や「LogicException」を使ったほうがいいと思います。前者は実行時に発生するかもしれない例外、後者は発生してはいけない例外(コーディングミスなど)です。それらにもさらに継承クラスがあるのでそれを用いるとさらに例外が細分化できていいと思います。
http://qiita.com/mikakane/items/dafd3d28c27311e5 …
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP DBのハッシュ化したパスワードをpassword_verifyで戻し照合したのですが上手く行きません 2 2023/02/06 13:24
- Java すみません。助けてください。 javaについての質問です。 integerに変換できない数値をエラー 5 2022/05/18 19:16
- C言語・C++・C# C# で、あるフォルダー内にあるすべてのテキストファイルを別のフォルダーにコピーする。 4 2022/11/21 13:23
- Java Javaのソースコード作成が難しいです... 10 2022/11/11 14:06
- PHP PHP一覧表示した項目にリンクをはりたい 1 2023/07/12 17:08
- その他(プログラミング・Web制作) zshの例外処理 1 2022/06/02 16:36
- Ruby 初心者 パイソンプログラム 2 2022/05/30 07:34
- C言語・C++・C# C#のSystem.Windows.Media.Colorに関する質問です。 3 2022/05/18 11:51
- 英語 "Try not"と"Don't try"の違い等について 9 2022/12/14 11:45
- 英語 分離不定詞 1 2023/07/16 17:29
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBA コレクションに2次元配列...
-
PHPの名前空間インポートについて
-
fuelphpのpagination
-
CSVファイルをブラウザのキャッ...
-
PHP SESSION変数を複数使用でき...
-
実行中の他のアプリのパスの取...
-
php 入力画面から確認表示画面...
-
wordの差し込み印刷で文字...
-
findstrのerrorlevel
-
セッションのスコープ(有効範...
-
バッチファイルでpingの結果を...
-
Yahoo! JAPAN IDを新規取得でき...
-
switch()文で値の大小比較
-
excel access連携 このテーブル...
-
VB6でDBからクリップボード経由...
-
ps3で久しぶりにCDの音楽情報取...
-
PHPを使って、別サイトの一部を...
-
RSS URL 取得 判定
-
VBS「開いているページ」のURL...
-
積立投資してます。現在平均取...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA コレクションに2次元配列...
-
エラーの理由が分りません。Pri...
-
可変変数にアロー演算子を使いたい
-
VB.NETからVBAマクロ(引数)を呼...
-
PHP、ヒアドキュメント内でのIF...
-
VB.NETSystem.Xml 要素数を得る...
-
どういうプログラムを関数化を...
-
vb作成したらでbeep音が鳴りま...
-
次のhtml・cssでspan内の文字を...
-
classの再定義エラーについて
-
既存関数の上書き
-
protectedなのにアクセスできな...
-
UNIX CP "で上書きしません"
-
PHPでの画像の形式の変換
-
配列の操作時にLNK2001外部シン...
-
PHPプログラム上で「URLを直接...
-
Let's Encryptで自動更新がされ...
-
ExcelVBAで部分一致(*)をしたい
-
VB6のコンボボックスのテキスト...
-
ASPのResponse.WriteをPHPでは...
おすすめ情報