A priori, OutOfRangeException est à utiliser quand la valeur donnée se trouve en dehors de l'intervalle, RangeException quand un intervalle invalide est donné (et là, je pompe la seule phrase de
la doc)
Je crois que tu t'es planté dans ta dernière phrase... Ce serait pas plutôt :
Un fichier n'existant pas ou n'étant pas accéssible entrant dans ce cas de figure.
??
Les exceptions qui héritent de RuntimeException proviennent d'erreurs de l'utilisateur (j'entends par là : l'utilisateur de la classe qui lève l'exception et éventuellement l'utilisateur final). Les exceptions qui héritent de LogicException proviennent "d'erreurs de programmation" et ne devraient pas provoquer d'erreur à l'exécution.
Un fichier inexistant, un email invalide, cela ne peut pas être prévu par le développeur, ce sont bien des RuntimeException.
Ton post suivant arrive à ce moment de la rédaction de ma réponse.
Je pense que tes exemples ne sont pas corrects.
Toutes les erreurs que tu cites en exemple sont des erreurs à l'exécution (RuntimeException), pas des erreurs logiques (LogicException). Il n'est JAMAIS possible pendant la conception de prévoir ce qui va se passer lors de l'écriture/lecture/etc d'un fichier.
Par contre, si on tente de donner de manière programmatique un nom invalide à un fichier et qu'on tente de le créer, alors on aura une erreur logique. Idem si on tente d'accéder à un fichier par un nom variable mal défini.
Exemple : j'ai un fichier /srv/http/default/data/bidule.txt
j'ai $name = 'bidule' défini quelque part. Je tente d'accéder au fichier :
$content = file_get_contents(ROOT.$name.'.txt);
Si j'ai correctement défini ma constante ROOT et que je n'accède pas au fichier, soit il n'existe pas (ou plus), soit je n'ai pas les permissions, soit le nom est erroné => RuntimeException, parce que je ne pouvais pas le deviner quand j'ai écrit mes lignes de code.
Par contre si je me suis complètement planté dans la définition de ma constante ROOT, ou que j'ai déplacé le répertoire parce que je trouve que maintenant l'arborescence de mon site est plus simple, alors c'est une erreur de ma part => LogicException.
Pour pousser le bouchon un peu plus loin, toujours avec le même exemple. Si le fichier n'est plus là parce que je me suis planté dans la manipulation de mes fichiers : s'il s'agit d'un fichier de cache et que mon système de cache est mal implémenté, il va le supprimer car obsolète mais pas le réécrire => LogicException.
Mais une RuntimeException n'est pas véritablement une erreur : c'est une exception, et c'est là toute la différence. C'est à dire que ce n'est pas le fonctionnement "normal" du programme. Une exception, ça peut se gérer très proprement. D'où l'importance d'avoir suffisament d'exceptions étendues pour pouvoir gérer les "erreurs" qui surviennent lors de l'exécution de son programme : plus on découpe, plus on peut gérer de petits morceaux de code susceptibles de causer des erreurs et moins on a de chances d'avoir une bête page d'erreur pour dire à l'utilisateur que non, il ne verra rien, parce que 1,2 n'est pas un entier.
--
Neige
Souvent la réponse à votre question se trouve dans la
doc. Commencez par là ;)