## Opérateur de contrôle d'erreur

PHP supporte un opérateur de contrôle d'erreur : l'arobase (`@`). Lorsque cet opérateur est ajouté en préfixe d'une expression PHP, les diagnostics d'erreurs qui peuvent être générés par cette expression seront ignorés.

Si un gestionnaire d'erreur personnalisé est défini avec set_error_handler(), il sera quand même appelé même si le diagnostic a été ignoré.

Avertissement

Avant PHP 8.0.0, le error_reporting() appelé dans le gestionnaire d'erreur personnalisé retournait toujours `0` si l'erreur a été ignorée avec l'opérateur `@`. À partir de PHP 8.0.0, il retourne la valeur de cette expression (bit à bit) : `E_ERROR | E_CORE_ERROR | E_COMPILE_ERROR | E_USER_ERROR | E_RECOVERABLE_ERROR | E_PARSE`.

Tous les messages d'erreur générés par l'expression sont disponibles dans l'élément `"message"` du tableau retourné par la fonction error_get_last(). Le résultat de la fonction changera à chaque erreur, aussi, il convient de le vérifier souvent.

Exemple #1 Erreur de fichier intentionnelle

    <?php
    $mon_fichier = @file ('non_existent_file') or
        die ("Impossible d'ouvrir le fichier : L'erreur est : '" . error_get_last()['message'] . "'");
    ?>

Exemple #2 L'expression de suppression

    <?php
    // Cela fonctionne avec n'importe quelle expression, pas seulement les fonctions
      $value = @$cache[$key];
    // la ligne ci-dessus n'affichera pas d'alerte si la clé $key du tableau n'existe pas
    ?>

> Note: L'opérateur `@` ne fonctionne qu'avec les expressions. La règle générale est : s'il est possible de prendre la valeur de quelque chose alors, on peut préfixer l'opérateur `@` à celui-ci. Par exemple, il peut être préfixé devant les variables, appels de fonctions, certains appels aux constructions de langages (e.g. include), etc. Il ne peut pas être préfixé devant les définitions de fonctions ou de classes ou structures conditionnelles telles que `if` et `foreach`, etc.

Avertissement

Avant PHP 8.0.0, il était possible pour l'opérateur `@` de désactiver les erreurs critiques qui terminaient l'exécution du script. Par exemple, préfixer `@` à un appel d'une fonction qui n'existe pas, en étant indisponible ou mal orthographiée, entraînait l'arrêt du script sans aucune indication de la raison.

### Voir aussi

- error_reporting()
- Gestion d'Erreur et fonction de Logging

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open