4

Symfony 2 でアプリを構築していますが、存在しない配列のインデックスを読み取ろうとしたときにエラーを処理するにはどうすればよいでしょうか? 残念ながら、この種のエラーは例外をスローしないため、実際には try-catch ブロックを使用できません。

例:

$test = array();
$test["323"];       // Undefined index error!

このエラーを処理する方法を教えてください。

更新: で多くのソリューションを見てきましたisset。これに関する問題は、配列インデックスへのすべてのアクセスでこれを行う必要があることです。誰かが私にもっとドライなソリューションを提供できますか?

4

6 に答える 6

13

両方:

if(isset($test["323"])){
   //Good
}

if(array_key_exists('123', $test)){
   //Good
}

使用する前に、配列インデックスが定義されているかどうかを確認できます。これは Symfony 固有のエラーではありません。存在しない配列要素にアクセスしようとするたびに発生する一般的な PHP 警告です。

$val = isset($test["323"]) ? $test["323"] : null;
于 2013-10-31T10:28:16.833 に答える
8

オプションはset_error_handler()、どういうわけか、例外をシミュレートするために使用することです。使用例は次のとおりですが、これを特定のユースケースに合わせて調整できると確信しています。

function my_error_handler($errno,$errstr)
  {
  /* handle the issue */
  return true; // if you want to bypass php's default handler
  }

$test = array();
set_error_handler('my_error_handler');
$use_it=$test["323"]; // Undefined index error!
restore_error_handler();

set_error_handler()「重要な」コード部分をとで「ラップ」していることがわかりますrestore_error_handler()。問題のコードは、1 行からスクリプト全体に及ぶ場合もあります。もちろん、クリティカル セクションが大きいほど、エラー ハンドラはより「インテリジェント」である必要があります。

于 2013-10-31T11:07:15.990 に答える
3

次のようにarray_key_exists()を使用します

if (array_key_exists('123', $test)) {
    echo "it exists";
}
于 2013-10-31T10:27:07.037 に答える
0

未定義または多数の php エラーを試行/キャッチする簡単な方法。

try{
    set_error_handler(function($errno, $errstr, $errfile, $errline, array $errcontext){
       if (0 === error_reporting()) { return false; }
       throw new ErrorException($errstr, 0, $errno, $errfile, $errline);
    });
    
    $data = $json['name']; ---> Undefined Index name
}catch(Exception $e){
    //Perform Furthur action 
}
于 2020-07-09T09:05:38.030 に答える