21

私は機能を持っています:

public function CustomerRating() {
     $result = $db->query("...");
     $row = $result->fetch_assoc();

     if($row)
          $output = $row['somefield'];
     } else {
          $output = "error";
     }

     return $output;
}

//somewhere on another page...
if(is_numeric($class->CustomerRating()) {
     echo $class->CustomerRating;
} else {
      echo "There is an error with this rating.";
}

エラーを見つけるためのより良い方法はありますか?この関数では、行が返されない場合、それ自体が「エラー」を意味するのではなく、単に値を計算できないことを意味します。関数の結果をチェックするとき、if関数に表示する前に返されるデータをチェックするより良い方法があるように感じます。これを行うための最良の方法は何ですか?「false」を返したいのですが、関数を呼び出すときにどのようにチェックしますか?ありがとう!

4

7 に答える 7

11

(私の意見では)2つの一般的な方法があります:

  1. 多くの組み込み false
    PHP関数がそれを行います

  2. SPL例外の使用
    進化したPHPフレームワーク(Symfony2、ZF2、...)はそれを行います

于 2012-07-13T16:10:31.777 に答える
5

例外が必要です:

public function CustomerRating() {
     $result = $db->query("...");
     $row = $result->fetch_assoc();
     if ($row !== null) {
          return $row['somefield'];
     } else {
          throw new Exception('There is an error with this rating.');
     }
}

// Somewhere on another page...
try {
    echo $class->CustomerRating();
} catch (Exception $e) {
    echo $e->getMessage();
}
于 2012-07-13T16:09:05.237 に答える
3

例外を使用します。関数とメソッドからエラーを返さないようにする

于 2012-07-13T16:08:45.867 に答える
3

エラーを示すためにfalseを返すことは、PHPライブラリで一般的ですが、いくつかの欠点があります。

  1. エラーに関する説明を返すことはできません
  2. false値が関数の有効な戻り値である場合、このアプローチを使用することはできません

私の仕事で見た別のアプローチは、通常の結果と起こりうるエラーの両方を含む配列を返すことです。基本的にはペアを返しますが、実際の結果を取得するには、配列からそれを取得する必要があります。これは、書くのがより不快なコードです。

例外はこの問題の本格的な解決策ですが、単純なエラーのtry...catchブロックを作成するのは少し面倒です。例外をスローするように文書化されている関数の場合、呼び出したときに例外をキャッチしないと、PhpStormはそれについて文句を言うので、私の意見では、例外はより重大なエラーのために予約されています。

結果と発生する可能性のあるエラーの両方を返す1つの方法は、ObjectiveCでよく使用される参照渡しパラメーターを使用することです。

/**
 * get element from array
  * @param $index int
  * @param $list array
  * @param $error object
  */
function getFromArray($index, $list, &$error=null) {
    if ($index >= 0 && $index < count($list)) {
        return $list[$index];
    }

    $error = "out of index";
    return null;
}

$list = ['hello', 'world'];

$error = null;
$result = getFromArray(-1, $list, $error);
if ($error) {
    echo "an error occurred " . $error;
} else {
    echo $result;
}

エラーを気にしない場合は、エラーパラメータを省略して関数を呼び出すことができます

echo getFromArray(0, $list);
于 2019-02-13T02:17:23.257 に答える
0

私は例外を使用します-混乱を節約します。

于 2012-07-13T16:08:25.610 に答える
0

エラーに対処する最善の方法は、例外をスローすることです。そうすれば、あらゆる種類の異なるエラーが発生し、それに応じて処理できます。

その後、次のことができます。

try {
    $myvar = CustomerRating();
    //do something with it
} catch (Exception $e) {
    echo $e->getMessage();
}
于 2012-07-13T16:08:39.777 に答える
0

これを試してみてください:

public function CustomerRating() {
     $result = $db->query("...");
     $row = $result->fetch_assoc();

     if($row){
         $output = $row['somefield'];
     } else {
         $output = false;
     }

     return $output;
}

//somewhere on another page...
if($class->CustomerRating() !== false) {
     echo $class->CustomerRating();
} else {
     echo "There is an error with this rating.";
}

これにより、ゼロを返しても壊れないようになります。

于 2012-07-13T16:12:03.977 に答える