web-dev-qa-db-fra.com

PHP Remarque: index non défini en utilisant try\catch

Voici mon bloc try/catch en PHP:

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

Lorsqu'il n'y a rien dans le $_GET["id"], j'obtiens toujours l'erreur de notification . Comment puis-je éviter de recevoir cette erreur?

15
Asaf Nevo

utilisez la fonction isset pour vérifier si la variable est définie ou non:

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

Si vous voulez une solution rapide et "sale", vous pouvez utiliser

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

Modifier:

Depuis PHP 7.0, il existe une solution bien meilleure et acceptée: utiliser l'opérateur de coalescence null (??) . Avec cela, vous pouvez raccourcir votre code pour

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

et vous n'obtenez pas d'avis car vous avez défini ce qui devrait se produire si la variable n'est pas définie.

2
Markus Madeja

Si l'absence d'identifiant signifie que rien ne doit alors être traité, vous devez alors tester l'absence de l'identifiant et gérer correctement l'échec.

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

ALORS continuez et essayez-vous/attrapez-vous.

À moins bien sûr que vous ne deviez ajouter quelque chose d'intelligent à api () afin que soit répondu avec un ID par défaut, que vous déclareriez dans la fonction

function api($id = 1) {}

Donc, tout dépend, mais essayez d’échouer de bonne heure si vous le pouvez.

1
Cups

Essayez de vérifier si le $_GET a été défini 

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