2011-02-05 18 views
6

PHPで例外をスローする静的な方法はありますか?PHPで例外をスローする静的な方法はありますか

mysqlクエリが失敗したときに例外をスローする必要があります。

[email protected]_query($query) or throw new Exception(' Query Failed '); 

が、それは働いていない:

は、私はこれを試してみました。

私はthrowException() function from this comment at PHP: Exceptions manualに基づいて関数を使用していますが、クラスを作成せずにこれを行う静的な方法があるかどうかを知りたいと思います。

+0

「静的」とはどういう意味ですか? – BoltClock

+0

静的にはクラスを初期化せずに意味する – sreejith

+0

この無駄な「クエリ失敗」ステートメントは単なる例であり、実際にはクエリと一緒に実際にエラーが発生することを願っています –

答えて

4

を直接実行することはできません。throwは式ではなく文であるためです。 orは実際に演算子なので、そのオペランドは式(ある値に評価されるもの)であると考えます。あなたが代わりにこれを実行する必要があると思います

:あなたはwebbiedaveコメントを指摘するように、そのPHPマニュアルコメントによって提案されたthrowException()機能を使用しようとしている場合

$re = mysql_query($query); 

if (!$re) { 
    throw new Exception('Query Failed'); 
} 

は、あなたが呼び出す必要がありますと言っていますその関数の代わりに、このような直接throw文:

$re = mysql_query($query) or throwException('Query Failed'); 

あなたはクラスメソッドから例外をスローする必要があると述べているPHPにはルールがありません。その例外をキャッチする方法がある限り、あなたは大丈夫です。 Exceptionクラスを使用せずに例外をスローすることを意味する場合は、そうする必要があります。例外は本質的にオブジェクトです。オブジェクトではない(またはExceptionクラスから継承しない)例外をスローすることはできません。

例外をスローするのではなく、PHP(通知、警告、および致命的なエラー)からよく見られるエラーの種類を増やしたい場合は、trigger_error()を使用します。

$re = mysql_query($query); 

if (!$re) { 
    trigger_error('Query Failed', E_USER_ERROR); 
} 
+0

これは素晴らしいアイデアです! – sreejith

+0

命令型プログラミング言語のすべてがステートメントです;) 'throw'は言語構造体なので、パーサーによって処理され、ランタイムをいくつかの値に評価することはできません、 – meze

6

リンク先のコメントには、このように例外をスローするとは動作しません。 falseに評価エラー、がなかった場合

function throwException($message = null, $code = null) { 
    throw new Exception($message, $code); 
} 

$re = mysql_query($query) or throwException('Query Failed'); 
+0

そうです。 私はException :: setMessage( 'Message')のようなことをする方法を探していました。 しかし、BoltClockが – sreejith

+0

@ radosと答えた後は、それが不可能であることを知っています。そして彼はあなたが 'or'の後に関数を呼び出すと言っていますが、関数の代わりに実際の' throw'ステートメントを呼び出しています。 – BoltClock

+0

@BoltClockはい、私が今やっていることは次のようなものです: $ re = @ mysql_query($ query)またはIException :: throwException( 'Query Failed'); IExceptionは自分自身で作成したクラスです。自分で定義したクラスではなく、あらかじめ定義されたクラスを探していました。 – sreejith

2

あなたはまた、

mysql_query($query); 

if (mysql_error()) { 
    throw new Exception(...); 
} 

戻りmysql_error()として空の文字列のようなものを試してみてください:それはあなたが機能でそれを配置する必要が述べています。

+0

答えに感謝、それは良い方法です。 – sreejith

関連する問題