32
try     
{
    $matrix = Query::take("SELECT moo"); //this makes 0 sense

    while($row = mysqli_fetch_array($matrix, MYSQL_BOTH)) //and thus this line should be an error
    {

    }

    return 'something';
}
catch(Exception $e)
{
    return 'nothing';   
}

ただし、一部をキャッチして返すのではなく、。で始まる行にnothing警告が表示されます。私はphpで例外を使用することになったことがありませんが、C#で多く使用し、PHPでは動作が異なるようです。または、いつものように、明らかな何かが欠けています。Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, null givenwhile

4

5 に答える 5

42

例外ではないため、try-catchブロックで警告/エラーを処理することはできません。警告/エラーを処理する場合は、独自のエラーハンドラをに登録する必要がありますset_error_handler

ただし、この問題を防ぐことができるため、この問題を修正することをお勧めします。

于 2012-09-11T20:54:03.267 に答える
28

例外はThrowableのサブクラスのみです。エラーをキャッチするには、次のいずれかを実行してみてください。

try {

    catch (\Exception $e) {
       //do something when exception is thrown
}
catch (\Error $e) {
  //do something when error is thrown
}

またはより包括的なソリューション

try {

catch (\Exception $e) {
   //do something when exception is thrown
}
catch (\Throwable $e) {
  //do something when Throwable is thrown
}

ところで:Javaも同様の動作をします。

于 2018-01-11T07:49:12.373 に答える
6

PHPでは、警告も例外ではありません。一般に、ベストプラクティスは、防御コーディングを使用して、期待どおりの結果が得られることを確認することです。

于 2012-09-11T20:53:26.497 に答える
4

ウェルプ、残念ながらこれはPHPに関する問題です。try / catchステートメントは例外をキャッチしますが、受け取っているのは昔ながらのPHPエラーです。

次のようなエラーをキャッチする必要があります:http: //php.net/manual/en/function.set-error-handler.php

それか、mysqli_fetch_arrayを実行する前に、$matrixがmysqli_resultオブジェクトであるかどうかを確認してください。

于 2012-09-11T20:55:08.370 に答える
1

PHPは、例外ではなく警告を生成しています。警告をキャッチすることはできません。これらは、C#のコンパイラ警告に似ています。

于 2012-09-11T20:59:58.383 に答える