Developers/Object oriented programming in PHP/Exceptions/ru

Исключения в ООП — отличный механизм для работы с ошибками. Они позволяют обработать ошибки из вызываемых методов в одном блоке catch, вместо отлавливания возвращаемого значения каждого вызова метода:

Когда нужно использовать исключения, а когда — нет
Если столкнулись с неожиданными условиями в коде, которые не могут быть обработаны в методе, то лучше сгенерировать исключение, и пусть вызывающий методы (или инициализирущий сценарий) позаботиться об этом. Выше приведён хороший пример этого: ожидается product item, но заполучено что-то, что не реализует интерфейс product item. И не известно, что делать с этим объектом, и перед вызовом метода объекта, которые не существует (что приведёт к фатальной ошибке), будет сформировано исключение.

С другой стороны, встроенные в PHP функции не генерируют никаких исключений, и поэтому проблема не может быть обработана внутри блоков catch. Но есть и случаи, когда не нужно вызывать исключения и обрабатывать проблему иначе. Пример — типичные ошибки, которые могут быть обработаны внутри того же метода:

Метод в примере устанавливает тип каждого элемента в массиве $values. Если ни один недоступен, к этому значению тип не добавляется и не имеет смысла генерировать здесь исключение, если не нужно, чтобы каждое значение обязательно имело тип. Это справедливо и для методов, которые скорее всего приведут к ошибке, так как при этом легче проверить возвращаемое ими значение в вызывающем коде, чем наворачивать блок try/catch вокруг единственного вызова метода.

Исключения в Arcavias
Код Arcavias использует специфичные для домена исключения, например, все генерируемые исключения в коде домена товар/product являются объектами класса MShop_Product_Exception, расширяющего MShop_Exception и непосредственно встроенного в PHP класс Exception. Поэтому, возможно создать блоки catch для каждого домена или для всего относящегося к MShop кода:

Важно: передаваемые исключениям сообщения всегда должны быть отформатированы при помощи sprintf для возможности перевода строк сообщения посредством инструментов GNU gettext</tt>.

Смотрите также

 * http://php.net/manual/en/language.exceptions.php

<< Назад: абстрактные классы и интерфейсы