PHP-Hinweis: Undefinierter Index trotz Verwendung von try\catch

Lesezeit: 3 Minuten

Benutzer-Avatar
Asaf Newo

Dies ist mein Try/Catch-Block in PHP:

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

Wenn nichts drin ist $_GET["id"], erhalte ich immer noch den Benachrichtigungsfehler. Wie kann ich diesen Fehler vermeiden?

  • verwenden isset($_GET['id']) oder array_key_exists('id', $_GET); .. eine Million Duplikate, die für diese Frage zu zählen sind ..

    – dbf

    6. August 2013 um 13:31 Uhr


  • if (isset($_GET[‘id’])){ $api = neue api($_GET[‘id’]); }

    – Maximus2012

    6. August 2013 um 13:32 Uhr


  • Ein PHP-Hinweis ist keine Ausnahme.

    – Sangaran

    6. August 2013 um 13:32 Uhr

  • @dbf vielleicht tut es das. Der Zugriff auf einen undefinierten Array-Index löst jedoch immer noch den NOTICE aus. Wenn das OP dies vermeiden möchte, sollte es einen geeigneten Fehlerbehandler einrichten, der die Benachrichtigung tatsächlich in eine Ausnahme “umwandelt”, oder er kann eine Ausnahme manuell auslösen, wenn !isset($_GET['id'])

    – Sangaran

    6. August 2013 um 13:41 Uhr

  • $api->processRequest(); löst Ausnahmen aus

    – Asaf Newo

    6. August 2013 um 13:49 Uhr

verwenden isset Funktion, um zu prüfen, ob die Variable gesetzt ist oder nicht:

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

Benutzer-Avatar
Markus Madeja

Wenn Sie eine schnelle und “schmutzige” Lösung wünschen, können Sie verwenden

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

Bearbeiten:

Seit PHP 7.0 gibt es eine viel bessere und akzeptierte Lösung: die Verwendung von Null-Koaleszenzoperator (??). Damit können Sie Ihren Code verkürzen

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

und Sie erhalten keine Benachrichtigung, weil Sie definiert haben, was passieren soll, falls die Variable nicht definiert ist.

  • Für die Kinder zu Hause ist dies in der Tat schmutzig und Sie sollten dies nicht als Lösung betrachten.

    – Jason McCreary

    6. August 2013 um 13:39 Uhr

  • dies entspricht nicht dem Verhalten, nach dem der Fragesteller sucht.

    – Pancho

    28. März 2020 um 15:11 Uhr

Benutzer-Avatar
Tassen

Wenn das Fehlen von id bedeutet, dass nichts verarbeitet werden soll, sollten Sie auf das Fehlen der id testen und den Fehler ordnungsgemäß handhaben.

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

DANN geh weiter und probiere/fange.

Es sei denn natürlich, Sie würden api() etwas intelligenter machen, damit es mit einer Standard-ID antwortet, die Sie in der Funktion deklarieren würden

function api($id = 1) {}

Es kommt also “alles darauf an”, aber versuche früh zu scheitern, wenn du kannst.

  • Beachten Sie, dass empty() löst keine Meldung aus, wenn die Variable nicht gesetzt ist. Als solche, isset() ist unnötig.

    – Jason McCreary

    6. August 2013 um 13:54 Uhr

Benutzer-Avatar
Jonathan

Sie müssen Throwable not Exception fangen:

} catch (Throwable $e) {

Versuchen Sie zu überprüfen, ob die $_GET war eingestellt

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);
}

Benutzer-Avatar
ma77c

Ab PHP 7 haben wir nun die Null-Koaleszenz-Operator.

try
{
    $api = new \Api($_GET['id'] ?? null);
}
catch (\Exception $e)
{
    $error = ["error" => $e->getMessage()];
    return json_encode($error);
}

Benutzer-Avatar
Nethma dissanayake

Aufbau von try…catch

 <?php

try {
    // perform some task
} catch (Exception $ex) {
    // jump to this part
    // if an exception occurred
}

Sie können isset verwenden

     <?php
    if(isset($_GET['id'])){
         $api = new api($_GET["id"]);
         echo $api -> processRequest();
     }else{
          $error = array("error" => $e->getMessage());
          echo json_encode($error);
     }
    ?>

Bonusbeispiel:

<?php
if(isset($_GET['name'])){
      $name = $_GET['name']; 
 }else{
      $name = "Name not set in GET Method";
 }
if(isset($_GET['age'])){
      $name = $_GET['age']; 
 }else{
      $name = "<br>Age not set in GET Method";
 }
echo $name;
echo $age;
?>

  • Ihre Antwort könnte durch zusätzliche unterstützende Informationen verbessert werden. Bitte bearbeiten Sie, um weitere Details wie Zitate oder Dokumentation hinzuzufügen, damit andere bestätigen können, dass Ihre Antwort richtig ist. Weitere Informationen zum Verfassen guter Antworten finden Sie in der Hilfe.

    – Gemeinschaft
    bot

    16. Oktober 2021 um 18:40 Uhr

1158810cookie-checkPHP-Hinweis: Undefinierter Index trotz Verwendung von try\catch

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy