Как лучше всего обрабатывать исключение в конструкции?
option1 – исключение catch, где созданный объект:
class Account { function __construct($id){ if(empty($id)){ throw new My_Exception('id can\'t be empty'); } // ... } } class a1 { function just($id){ try { $account = new Account($id); } catch(Exception $e){ $e->getMessage(); } } class a2{ function just($id){ try { $account = new Account($id); } catch(Exception $e){ $e->getMessage(); } }
option2 : исключение catch внутри __construct
class Account{ function __construct($id){ try{ if(empty($id)){ throw new My_Exception('id can\'t be empty'); } // ... } catch(My_Exception $e) { } }
Пожалуйста, напишите, в каких случаях следует использовать опцию1 и в которой следует использовать опцию2 или другое лучшее решение.
благодаря
Конечно, вы должны обработать исключение, заброшенное функцией вне этой функции, иначе это не будет иметь никакого смысла. Что касается конструкторов, постарайтесь как можно больше избегать «нового класса» и придерживаться функций генератора. Для каждого класса X определите, какой класс отвечает за создание объектов класса X, и добавьте функцию генератора в этот класс. Эта функция генератора также является идеальным местом для обработки исключений конструктора X
class AccountManager { function newAccount($id) { try { $obj = new Account($id); } catch.... return null; } } // all other code uses this instead of "new Account" $account = $accountManager->newAccount($id);
Какова цель бросить исключение и немедленно поймать его? Если вы хотите прервать функцию при ошибке, но не выдавать ошибку, вам следует return
.
Таким образом, ваш первый код всегда правильный. Пусть Exception пузырится вверх.