49 votes

Existe-t-il un moyen d'attraper une exception sans avoir à créer une variable ?

En PHP, j'attrape parfois des exceptions avec try/catch :

try {
    ...
} catch (Exception $e) {
    // Nothing, this is normal
}

Avec ce genre de code, je me retrouve avec la variable $e qui est créé pour rien (beaucoup de ressources), et PHP_MD (PHP Mess Detector) crée un avertissement à cause d'une variable inutilisée.

3 votes

Une exception ne doit pas être traitée comme "normale" - c'est une exception ou pas. Qu'est-ce qui déclenche les exceptions ?

0 votes

Je vérifie que le modèle lève une exception quand il le devrait. J'ai donc un bloc catch vide car je veux juste tester que l'exception a été levée.

2voto

Jsowa Points 4130

A partir de PHP 8.0 elle peut être typée sans variables, mais le cas général pour chaque Exception est maintenant Throwable . Classe Exception met en œuvre Throwable .

try {
    ...
} catch (CustomException) {
    // CustomException
} catch (Throwable) {
    //All other classes implementing Throwable interface
}

0voto

Jsowa Points 4130

Oui, vous pouvez le faire puisque PHP 8.0 . Si vous voulez attraper toutes les exceptions, vous pouvez utiliser Throwable .

try {
    ...
} catch (Exception) {
    // Exception
} catch (Throwable) {
    //All other classes implementing Throwable interface
}

-4voto

SanePumpkins Points 19

Les exceptions ne sont pas seulement utilisées pour des circonstances exceptionnelles.

Ce scénario utilise en fait des exceptions pour s'assurer que l'utilisateur est déconnecté. À ce stade du script, il est très coûteux en ressources de déterminer quelles données doivent être élaguées, il est donc plus rapide de tout élaguer et d'attraper les exceptions.

        try {
        GDS::$DB->exec('DELETE FROM sessions WHERE session_id = ' . session_id());
        GDS::$DB->exec('DELETE FROM sessions WHERE user_id = ' . $this->data['user_id']);
    } catch(PDOException $ex) {}
    session_regenerate_id(true);
    setcookie('bis_[user_id]', 0, time() - 1, null, null, false, true);
    setcookie('bis_[session_start]', 0, time() - 1, null, null, false, true);
    setcookie('bis_[session_time]', 0, time() - 1, null, null, false, true);

10 votes

En quoi est-ce une réponse ?

0 votes

De plus, cela permet d'ignorer la deuxième déclaration si la première est rejetée, ce qui n'est probablement pas ce qui était prévu.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X