web-dev-qa-db-fra.com

Quelles sous-classes d'exceptions sont intégrées à PHP?

Je n'ai pas encore pu trouver une liste de toutes les sous-classes d'exception intégrées en PHP. Je préfère utiliser celles intégrées quand elles ont du sens, avant de créer mes propres sous-classes d'exceptions.

Par exemple, je sais que InvalidArgumentException existe, mais il ne semble rien de comparable à NullPointerException de Java.

Quelqu'un a-t-il ou peut-il créer un lien vers une liste des sous-classes d'exceptions disponibles en PHP?

50
Chris

PHP 5 a deux exceptions intégrées

Les bibliothèques au sein de PHP ont leurs propres exceptions intégrées

  • DOMException Les opérations DOM déclenchent des exceptions dans des circonstances particulières, c'est-à-dire lorsqu'une opération est impossible à effectuer pour des raisons logiques.
  • IntlException sa classe est utilisée pour générer des exceptions lorsque des erreurs se produisent dans les fonctions intl. Ces exceptions ne sont générées que lorsque intl.use_exceptions est activé.
  • PharException Lancé lors de l'utilisation de la classe Phar
  • ReflectionException Lancé lors de l'utilisation des classes Reflection

SPL inclut quelques-unes de ses propres exceptions intégrées :

  • BadFunctionCallException Un rappel fait référence à une fonction non définie ou si certains arguments sont manquants.
  • BadMethodCallException Un rappel fait référence à une méthode non définie ou si certains arguments sont manquants.
  • DomainException Une valeur n'adhère pas à un domaine de données valide défini.
  • InvalidArgumentException Les arguments passés n'étaient pas valides.
  • LengthException Le paramètre dépasse la longueur autorisée (utilisé pour les chaînes, les tableaux, la taille du fichier, etc.).
  • LogicException Une erreur générique s'est produite dans la logique du programme.
  • OutOfBoundsException Un index illégal a été demandé.
  • OutOfRangeException Un index illégal a été demandé. Cela représente des erreurs qui devraient être détectées au moment de la compilation.
  • OverflowException Ajout d'un élément à un conteneur complet.
  • RangeException Indique les erreurs de plage lors de l'exécution du programme. Normalement, cela signifie qu'il y avait une erreur arithmétique autre que sous/dépassement.
  • RuntimeException Une erreur qui ne peut être trouvée qu'à l'exécution se produit.
  • UnderflowException Exécution d'une opération non valide sur un conteneur vide, telle que la suppression d'un élément.
  • UnexpectedValueException Une valeur inattendue a été reçue (c'est-à-dire comme résultat d'une valeur renvoyée par un appel de méthode).

PHP 7 introduit de nouvelles exceptions, y compris des erreurs capturables. Les nouvelles exceptions incluent:

  • Throwable est l'interface de base pour tout objet qui peut être lancé via une instruction throw dans PHP 7, y compris les erreurs et les exceptions).
  • Error est la classe de base pour toutes les erreurs internes PHP.
  • AssertionError est levée lorsqu'une assertion faite via assert () échoue.
  • ParseError est levée lorsqu'une erreur se produit lors de l'analyse PHP, comme lorsque eval () est appelé.
  • TypeError Il existe trois scénarios où une TypeError peut être levée. Le premier est celui où le type d'argument transmis à une fonction ne correspond pas au type de paramètre déclaré correspondant. La seconde est celle où une valeur renvoyée par une fonction ne correspond pas au type de retour de fonction déclaré. Le troisième est où un nombre non valide d'arguments est passé à une fonction intégrée PHP (mode strict uniquement).
  • ArithmeticError est émis lorsqu'une erreur se produit lors de l'exécution d'opérations mathématiques. Dans PHP 7.0, ces erreurs incluent la tentative d'effectuer un décalage de bits d'un montant négatif et tout appel à intdiv () qui entraînerait une valeur en dehors des limites possibles d'un entier.
  • DivisionByZeroError est levé lorsqu'une tentative est faite pour diviser un nombre par zéro.
  • ArgumentCountError est levé lorsque trop peu d'arguments sont passés à une fonction ou une méthode définie par l'utilisateur.

PHP 7.3 introduit des exceptions JSON:

  • JsonException est levé lorsque json_encode() et json_decode() rencontrent une erreur.

Voici un graphique qui illustre la nouvelle hiérarchie introduite dans PHP 7:

\Throwable
├── \Exception (implements \Throwable)
|   |── \DOMException (extends \Exception)
|   ├── \IntlException (extends \Exception)
|   ├── \JsonException (extends \Exception)
|   |── \PharException (extends \Exception)
|   |── \ReflectionException (extends \Exception)
│   ├── \LogicException (extends \Exception)
│   │   ├── \BadFunctionCallException (extends \LogicException)
│   │   │   └── \BadMethodCallException (extends \BadFunctionCallException)
│   │   ├── \DomainException (extends \LogicException)
│   │   ├── \InvalidArgumentException (extends \LogicException)
│   │   ├── \LengthException (extends \LogicException)
│   │   └── \OutOfRangeException (extends \LogicException)
│   └── \RuntimeException (extends \Exception)
│       ├── \OutOfBoundsException (extends \RuntimeException)
│       ├── \OverflowException (extends \RuntimeException)
│       ├── \RangeException (extends \RuntimeException)
│       ├── \UnderflowException (extends \RuntimeException)
│       └── \UnexpectedValueException (extends \RuntimeException)
└── \Error (implements \Throwable)
    ├── \AssertionError (extends \Error)
    ├── \ParseError (extends \Error)
    └── \TypeError (extends \Error)
        └── \ArgumentCountError (extends \TypeError)
    └── \ArithmeticError (extends \Error)
        └── \DivisionByZeroError extends \ArithmeticError)
99
John Conde

En fait, j'ai réussi à les trouver maintenant que je suis tombé en panne et que j'ai demandé.

Techniquement, cela ressemble à PHP n'a que 2 exceptions intégrées: http://www.php.net/manual/en/reserved.exceptions.php

Et le SPL en définit plusieurs autres: http://www.php.net/manual/en/spl.exceptions.php

Avec une explication de leur hiérarchie: http://www.php.net/~helly/php/ext/spl/classException.html

Mise à jour

Le lien ci-dessus est mort, c'était un diagramme de la hiérarchie d'exception de base PHP. Je n'ai pas pu trouver l'original, mais voici un remplacement:

PHP Exception Hierarchy

Trouvé à l'origine sur http://fossies.org/dox/php-5.2.17/classException.html

18
Chris