8

重複の可能性:
PHP: 命令の 'or' ステートメントが失敗する: 新しい例外をスローするには?

PHP では、さまざまな MySQL 接続チュートリアルの初心者の間で特に人気があり、常に次のようなことができます...

<?php
foo() or die('foo() failed!');
?>

しかし、私がこのようなことをしようとすると、失敗します...

<?php
foo() or throw new Exception('AHH!');
?>

そのようです...

「解析エラー: 構文エラー、予期しない 'throw' (T_THROW) が...」

これと似たようなことをする方法を知っている人はいますか?「または」の後に変数を設定する必要がありますか?

4

2 に答える 2

12

あまり「賢い」方法ではありません:

if(!foo()) {
    throw new Exception('AHH!');
}

なぜor throw new Exception()機能しないのか疑問に思っている場合は、演算子の短絡に依存しているためです。最初の引数が true の場合、2 番目の引数を評価していずれかが true かどうかを判断する必要はありません。 (それらの少なくとも1つが真であることはすでにわかっているため)。or

throwブール値 (またはまったく値) を返さない式であるため、これを行うことはできません。そのため、 oring は意味がありません。

本当にこれを行いたい場合は、@emie によって削除された回答が機能するはずです (例外をスローするだけの関数を作成します)。これは、戻り値のない関数でもブール ステートメントで有効であるためです。そのような関数を作成して、ブールステートメントで賢いことを行うことができます。

于 2012-10-05T17:04:27.830 に答える
3

同様の質問が以前に尋ねられました。

PHP: 命令の 'or' ステートメントが失敗しました: 新しい例外をスローする方法は?

理由

bar() or throw new Exception();

違法です

(boolean)throw new Exception();

も違法です。本質的に、例外をスローするプロセスは、オペレーターがチェックする戻り値を生成しません。

于 2012-10-05T17:08:50.690 に答える