Ознакомился с типами исключений в SPL и нашёл там:
OutOfRangeException - обнаружение запроса к несуществующему индексу во время компиляции. OutOfBoundsException - обнаружение запроса к несуществующему индексу во время выполнения.
Стало интересно. У меня есть методы типа get('value'), которые возвращают значение свойства объекта. Правильно ли я понимаю:
$obj->nonexisting_property - прямой доступ, при несуществующем свойстве это будет ошибка во время компиляции.
$obj->get('nonexisting_property') - доступ через метод, ошибка во время выполнения.
То есть для первого варианта логично выбросить OutOfRangeException (например, после проверки isset()), а для второго - OutOfBoundsException. Так?
И ещё - где можно подробно почитать алгоритм чтения и выполнения PHP скриптов (доступным языком)? То есть, как работает и запускается парсер, что подгружается при компиляции, что при выполнении и т. п.
Во-первых, по вашей ссылке нет ничего нового, что бы ни было уже прочитано мной в мануале.
Во-вторых, если искать информацию о различиях двух исключений - на том же StackOverflow мнения неоднозначны - в PHP граница между компиляцией и выполнением далеко не очевидна.
Плюс мне действительно нужен толковый, проверенный материал, объясняющий процесс парсинга, компиляции и выполнения PHP.
Посторонним В.: А компиляции как таковой в PHP и нет, потому каждый интерпретирует как считает нужным.
Если в первоисточнике (php.net) нет ответа, а на StackOverflow вас не устраивает однозначность - то пришло время думать самому, хотя однозначного ответа здесь нет и не будет.
Не нравится неоднозначность исключений - так не используйте, создайте свои.
Судя по поисковой выдаче исключения были созданы по аналогии с другими языками, называются точно так же и в том же регистре символов, то есть для переходящих с других языком это может иметь какой-то особый смысл.