7.04.2016 / 19:27 | |
kingdosya Пользователь Сейчас: Offline
Имя: Сергей Откуда: Вашингтон Регистрация: 06.08.2013
| Цитата Jahak: kingdosya, а если тебе придется перехватывать различные классы исключений, будешь писать такую простынь Открыть спойлер Закрыть спойлер try { //тут у тебя будет много разных типов исключений } catch (Exception
не пойму тех кто обрабатывает исключений внутри catch. Мне кажется будет удобно если обрабатывать в тех классах исключений. Изменено kingdosya (7.04 / 19:28) (всего 1 раз) |
7.04.2016 / 20:07 | |
Jahak Пользователь Сейчас: Offline
Имя: Константин Регистрация: 16.01.2012
| Цитата kingdosya: не пойму тех кто обрабатывает исключений внутри catch. Мне кажется будет удобно если обрабатывать в тех классах исключений.Вот сейчас не понял. Можешь набросать код, как это будет выглядеть в твоем понимании |
7.04.2016 / 22:10 | |
Витаминыч Супермодератор Сейчас: Offline
Имя: Василиус Откуда: RZN Регистрация: 20.04.2012
| Цитата kingdosya: не пойму тех кто обрабатывает исключений внутри catch. Мне кажется будет удобно если обрабатывать в тех классах исключений.В смысле? У тебя есть определенные классы исключений, у каждого свои методы для их обработки. Потом в нужном catch просто вызываешь метод того класса, которые выкидывает исключение в этом try. Итого в самом коде обработки нет, она в том классе происходит. Либо ты как-то не так все это понимаешь в принципе __________________
わからない!! |
7.04.2016 / 22:14 | |
Koenig Модератор форума Сейчас: Offline
Имя: Дмитрий Откуда: Калининград(Koenigsberg) Регистрация: 23.01.2011
| Витаминыч, да все исключения имеют один интерфейс, все одинаково
__________________
Магистр Мёда |
8.04.2016 / 07:28 | |
Jahak Пользователь Сейчас: Offline
Имя: Константин Регистрация: 16.01.2012
| kingdosya, почитай тут и тут Изменено Jahak (8.04 / 07:29) (всего 1 раз) |
8.04.2016 / 12:48 | |
kingdosya Пользователь Сейчас: Offline
Имя: Сергей Откуда: Вашингтон Регистрация: 06.08.2013
| Цитата Витаминыч: Потом в нужном catch просто вызываешь метод того класса вот здесь почему не использовать конструктор? Т.е. вызывать методы не из catch а вызывать приватные методы в конструкторе. например class my extends exception {
__construct() {
// обработать исключение
// посетителю показать страницу ошибки
exit();
}
}
function fff() { try { } catch (my $e) { // пусто !!! т.к. обработка происходить в конструкторе через приватные методы. По этому не знаю что здесь пишут другие } } |
8.04.2016 / 13:06 | |
kingdosya Пользователь Сейчас: Offline
Имя: Сергей Откуда: Вашингтон Регистрация: 06.08.2013
| Цитата Jahak: kingdosya, почитай тут и тут я почитал эти статьи еще до этого. И я вообще не это хотел спросить |
8.04.2016 / 13:53 | |
kingdosya Пользователь Сейчас: Offline
Имя: Сергей Откуда: Вашингтон Регистрация: 06.08.2013
| ТАК ДАВАЙТЕ Я ВАМ ПОДРОБНО ОБЪЯСНЯЮ ЧЕГО ЖЕ Я ХОЧУ: много текста много текста Хочу понять как правильно использовать исключений на ПРАКТИКЕ! В статьях просто покажут некий участок кода+основной синтаксис+о том что в исключениях не должна быть логика приложения. Все!
Сначала познакомлю вас со структурой сайта, допустим она такая (упрощенная): public_html > index.php, system, app
system > db.class.php
app > login.class.php, register.class.php, view_account.class.php и т.д.
1 - все запросы к сайту обрабатывается только через index.php 2 - index.php создает нужный объект из app 3- объекты из app используют объект db
И так допустим класс db такой:
class db {
function connect() {
}
function insert() {
}
function update() {
}
function delete() {
}
}
function ........................
теперь допустим эти методы выбрасывают исключений типа sqlEx:
class db {
function connect() {
...
try {
}
catch (sqlEx $e) {
}
...
}
function insert() {
...
try {
}
catch (sqlEx $e) {
}
...
}
function update() {
...
try {
}
catch (sqlEx $e) {
}
...
}
function delete() {
...
try {
}
catch (sqlEx $e) {
}
...
}
}
function ........................
код try {
} catch (sqlEx $e) {
} повторяется!
чтобы это не сделать поместим код в вверх. Т.е. в app'овские файлы
например login.class.php :
class login {
...
try {
//вызов метода из db
}
catch (sqlEx $e) {
}
...
}
теперь в классе db убираем тот код:class db {
function connect() {
...
...
}
function insert() {
...
...
}
function update() {
...
...
}
function delete() {
...
...
}
}
function ........................
отлично!
Теперь открываем эти файлы login.class.php, register.class.php, view_account.class.php и что же мы увидим во всех этих файлах? Конечно же кода который повторяется во всех этих файлах!
class login {
...
try {
//вызов метода из db
}
catch (sqlEx $e) {
}
...
}
и
class register {
...
try {
//вызов метода из db
}
catch (sqlEx $e) {
}
...
}
и
class view_account {
...
try {
//вызов метода из db
}
catch (sqlEx $e) {
}
...
}
опять код повторяется!!!
Что же будем делать? Ага поместим код еще в вверх. То есть в файл index.php
class index {
...
try {
// создать объект из app
//вызов метода из созданного объекта
}
catch (sqlEx $e) {
}
...
}
Гуд! код не повторяется! Но теперь получилось так что мы весь код сайта взяли в try. Вот и я спросил стоит ли это сделать ? Пост #459276 Изменено aNNiMON (8.04 / 14:27) (всего 3 раза) |
8.04.2016 / 14:24 | |
aRiGaTo Пользователь Сейчас: Offline
Имя: Snork Откуда: Yerevan Регистрация: 03.02.2010
| kingdosya, нет, так как ты теряешь контекст исключения. Как ты их там, сверху, собираешься обрабатывать? Показывать юзеру, что у тебя что-то не то в таблице users_passes - нехорошо и опасно (раскрытие системы). Та же история и с обработкой сразу же при возникновении (т.е. в твоём классе db). А вот, если ты его поймаешь при регистрации и скажешь юзеру мол «извини, по технических причинам не могу тебя зарегать», то будет очень даже хорошо.
__________________
don't tread on me |
8.04.2016 / 14:28 | |
Витаминыч Супермодератор Сейчас: Offline
Имя: Василиус Откуда: RZN Регистрация: 20.04.2012
| kingdosya, ну ответ как бы очевиден.. Для красоты кода, конечно, можешь совсем не отлавливать исключения Ты просто не совсем понял, какой код подразумевается под "повторяющимся".. это то, что можно спокойно вынести в отдельный метод/функцию. try-cath к такому коду не относится. Оставляй, если знаешь, как точно разобрать исключение (нет коннекта к БД и т.д.) В яве от него не деться никуда, например. Если только совсем не писать __________________
わからない!! |