web-dev-qa-db-ja.com

PHP注意:try \ catchを使用しているが未定義のインデックス

これは私のPHPのtry/catchブロックです。

try
{
    $api = new api($_GET["id"]);
    echo $api -> processRequest();
} catch (Exception $e) {
    $error = array("error" => $e->getMessage());
    echo json_encode($error);
}

$_GET["id"]に何もない場合でも、通知エラーが発生します。このエラーを回避するにはどうすればよいですか?

20
Asaf Nevo

isset関数を使用して、変数が設定されているかどうかを確認します。

if( isset($_GET['id'])){
    $api = new api($_GET["id"]);
    echo $api -> processRequest();
}
25
Nil'z

高速で「ダーティ」なソリューションが必要な場合は、

$api = new api(@$_GET["id"]);

編集:

PHP 7.0なので、 null合体演算子(??) を使用することで、はるかに優れた一般的な解決策があります。これを使用すると、コードを次のように短縮できます。

$api = new api($_GET["id"] ?? null);

変数が定義されていない場合にどうなるかを定義したので、通知を受け取りません。

3
Markus Madeja

IDがないことが何も処理されないことを意味する場合、IDがないことをテストし、障害を適切に管理する必要があります。

if(!isset($_GET['id'] || empty($_GET['id']){
// abort early
}

その後、続けて、あなたはトライ/キャッチしますか?.

もちろんapi()にスマートさを追加してデフォルトのIDで応答する場合を除き、関数で宣言します

function api($id = 1) {}

したがって、それは「すべてに依存」しますが、可能であれば早期に失敗します。

1
Cups

$_GETが設定されました

try
{
    if(isset($_GET["id"]))
    {
      $api = new api($_GET["id"]);
      echo $api -> processRequest();
    }
} catch (Exception $e) {
    $error = array("error" => $e->getMessage());
    echo json_encode($error);
}
0
Conrad Lotz