
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ランキング
-
VB.NETからVBAマクロ(引数)を呼...
-
Global.asaについて
-
VBA コレクションに2次元配列...
-
<a href>タグ内のURL抽出
-
classの再定義エラーについて
-
try~catch
-
エラーの理由が分りません。Pri...
-
既存関数の上書き
-
[C#]Arraylistに追加した構造体...
-
Dosブロンプトでtabを出力したい
-
「取得先」という表現について
-
DTOとEntityの差は何ですか。
-
switch()文で値の大小比較
-
cakephpで$paginatorにつけたい...
-
wordの差し込み印刷で文字...
-
Yahoo! のトップページのような...
-
VB.NETでボリュームを取得・設...
-
開始と終了を指定して、その間...
-
URLのパラメータをGETのままで...
-
【C#】FindWindowExの使い方を...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA コレクションに2次元配列...
-
VB.NETからVBAマクロ(引数)を呼...
-
PHP、ヒアドキュメント内でのIF...
-
エラーの理由が分りません。Pri...
-
どういうプログラムを関数化を...
-
可変変数にアロー演算子を使いたい
-
protectedなのにアクセスできな...
-
PHPの名前空間インポートについて
-
ASPのResponse.WriteをPHPでは...
-
[C++]std:mapの扱いを教えて頂...
-
vb作成したらでbeep音が鳴りま...
-
PHPの変数値をリンクさせたい
-
次のhtml・cssでspan内の文字を...
-
既存関数の上書き
-
classの再定義エラーについて
-
[C#]Arraylistに追加した構造体...
-
.htaccessについて
-
共用体のサイズをsizeofで
-
PHPで呼び出し元の関数名の取得...
-
PHPでの画像の形式の変換
おすすめ情報