Als ik op php.net kijk bij de omschrijving van InvalidArgumentException dan staat er:
"Exception thrown if an argument is not of the expected type."
Nu vraag ik me af of je een InvalidArgumentException ook kunt gooien op het moment dat er een key/id wordt aangeroepen die niet bestaat. In principe zou je dan kunnen zeggen dat het argument ook ongeldig is. Je hebt immers iets aangeroepen dat niet bestaat.
Nu zie ik dat PHP ook een OutOfBoundsException kent:
"Exception thrown if a value is not a valid key. This represents errors that cannot be detected at compile time."
Als ik het goed begrijp zou dit de exception zijn die je moet gooien als een key niet bestaat?
Ik vind het een lastig onderscheid eerlijk gezegd. Waarom niet uitsluitend de InvalidArgumentException gebruiken? Hoe doen jullie dat?
-compile time krijg je als je een rood streepje onder je code ziet wanneer je aan het coderen bent.
-run time krijg je wanneer je de applicatie runt en een fout naar je hoofd gegooid krijgt.
Overigens is het leuk en aardig dat je OutOfBoundsException geen leuke benaming vind maar let wel op.. dit is een algemene exception die bij veel programmeurs bekend is. wanneer jij allemaal custom errors terug gooit dan is het voor jou opvolger heel moeilijk om te achterhalen wat die fout is of waarom die error.
Als ik een OutOfBoundsException krijg dan weet ik dat het te maken heeft met het feit dat ik een array key aanroep die niet bestaat.
stel ik krijg UnknownIdException dan denk ik bij mezelf ohh nee weer een creatieve developer die zijn eigen errors namaakt.
In principe kan je de aangeleverde foutmeldingen gebruiken met een eigen stukje tekst voor de duidelijkheid zoals in Dos' voorbeeldje.
Alle script talen zijn intrepeters, en die runnen alleen wanneer je een script uitvoert.
Anders gezegd, je krijgt een compiler fout op het moment dat je een fout hebt in je code (bv haakje vergeten etc, etc.)
Runtime errors krijg je wanneer je bv een object vanuit je db probeert te halen maar dat dan de db niets terug geeft.
Alle exceptions zijn runtime, alleen binnen runtime heb je ook weer verschil: Errors kunnen afhangen van de code alleen (LogicException) of kunnen worden beïnvloed door dingen buiten de code, bijv. een bestand dat verwijderd is, verkeerde user input, etc. (RuntimeException).
Ik bedoel dus dat een compile error een soort van "spelfout" is. We zijn ergens een komma of een punt vergeten tijdens het typen. Terwijl een runtime error een fout is die tijdens de uitvoer van een request plaatsvindt. Correct?