powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Делать все методы статическими или класс абстрактным?
25 сообщений из 104, страница 4 из 5
Делать все методы статическими или класс абстрактным?
    #38065290
13576000 - жесть! пробросить исключение только для того, что бы самому его и поймать в блоке!!!
авторВ какую сторону развиваются исключения?
ни в какую!!!
авторМожно ли предположить, что в будущем механизм try ... catch будет использоваться для любых исключительных ситуаций и валидаций? Например, появится оператор продолжения скрипта (если ошибка не критична, но ее нужно зарегистрировать) или оператор повторения блока try, если ошибка исправлена?
нет!!!

просто вдумайся в пример - ме думает он будет тебе полезен!!!
Код: php
1.
2.
3.
4.
5.
6.
while (list($key, $value) = each($arr)) {
    if (!($key % 2)) { // skip odd members
        continue;
    }
    do_something_odd($value);
}
...
Рейтинг: 0 / 0
Делать все методы статическими или класс абстрактным?
    #38065316
что бы было с чем сравнить! твой вариант...
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
while (list($key, $value) = each($arr)) {
    try {
        if (!($key % 2)) {
             throw new Exception('Исключение', 1);       
        }
        do_something_odd($value);
    } catch(Exception $e) {
        continue;
    }    
}


извини, но это - капец!!!
...
Рейтинг: 0 / 0
Делать все методы статическими или класс абстрактным?
    #38065477
Фотография r u
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shitbox2а к тем, кто знаком с более ООПшными языками. В какую сторону развиваются исключения?
ООП и исключения это разные вещи. в Java исключения они работают аналогично. что значит развиваются?...........

извините. но вы пишите бред. ну что сложного - взять и прочитать хотябы теорию из мануала. прочитать вдумчиво. попытаться понять в чем суть . почему сделали именно так. в чем удобство этих конструкций.

помите. без этого вы так и будете задавать подобные вопросы, на которые даже отвечать нет желания, ибо видна ваша полная неосведомленность в этих вопросах. а следовательно объяснять бесполезно.
вы не поймете, пока не сядете и серьезно не разберетесь. и наши примеры кода вам нифига непомогают. это видно невооруженным взглядом.
...
Рейтинг: 0 / 0
Делать все методы статическими или класс абстрактным?
    #38065478
Фотография r u
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
как-то так...извини, но это - капец!!!
+1
исключения ради исключений)) топик бреда
...
Рейтинг: 0 / 0
Делать все методы статическими или класс абстрактным?
    #38065504
Shitbox2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Читал и достаточно досконально. Пример на ПХП http://www.php.net/manual/ru/features.file-upload.errors.php#89374
Тут исключения используются, чтобы обработать ошибку при загрузке файлов. А это можно считать ошибкой пользовательского ввода?

В zend, yii, simfony все построено на исключениях, даже классы валидаторов.

Тут http://wiki.agiledev.ru/doku.php?id=ooad:exception_using говорится, что в java пользовательский ввод обрабатывается исключениями.

Так что с вопросом разобрался достаточно хорошо. Чего у меня нет, так это большого опыта их использования.

Ну и код... Если вы поняли почему этот код должен возвращать к месту выброса исключения и как должен быть описан класс NotCriticalException
Код: php
1.
2.
3.
4.
5.
try {
    ...
    throw new Exception('Исключение', 1);
    ...
} catch(NotCriticalException $e) {


Объясните, пожалуйста.

Так же не понимаю, чего ругать вариант:
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
$result = false;
while($result){
$result = true;
try {
    ...
    throw new Exception('Исключение', 1);
    ...
} catch(NotCriticalException $e) {
$result = false;
}}


По-моему человек ясно показал, что возможность сделать, как я говорил есть, но код будет ужасным.
...
Рейтинг: 0 / 0
Делать все методы статическими или класс абстрактным?
    #38065578
авторЕсли вы поняли почему этот код должен возвращать к месту выброса исключения
да не должен он возвращать к месту... т.к. ты и так находишься в этом месте
Код: php
1.
2.
3.
4.
5.
6.
7.
try {
    ...
    //throw new Exception('Исключение', 1);    
    //ЗДЕСЬ МЫ ЖЕ УЖЕ ЗНАЕМ, ЧТО ЧТО-ТО НЕ ТАК =>
    //вместо перехода в блок catch обрабатываем "ошибку" по месту и двигаемся дальше
    ...
} catch(NotCriticalException $e) {


авторТак же не понимаю, чего ругать вариант
13578251 + 13578291 за такое, как минимум, лишают премии...
...
Рейтинг: 0 / 0
Делать все методы статическими или класс абстрактным?
    #38065670
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shitbox2Читал и достаточно досконально...
В zend, yii, simfony все построено на исключениях, даже классы валидаторов...

Хм... как-то плохо читал )) валидаторы в yii тебе не выбрасывают исключения, а позволяют узнать об ошибках с помощью методов класса (по крайней мере всегда с ними так работал).
"Исключения" так названы потому, что они требуются в исключительных(нестандартных/нештатных) ситуациях, когда последующее выполнение кода может привести к ошибке или само выполнение данного кода при данных обстоятельствах - это уже ошибка. В принципе, в любой ситуации можно и без них обойтись (не помню случая, когда был вынужден их использовать). Как я понимаю, они нужны только для того, что бы программист более высокого уровня (то есть пользующий твои библиотеки) смог узнать причину ошибки в библиотеке, и для того, что бы он эту ошибку не смог проигнорировать (например, ты не смог считать файл из-за того, что его формат не соответствует ожидаемому).
В случае с валидаторами, неправильно заполненная форма - это не исключительный случай (вполне нормально например, что я в одной букве в пароле ошибусь). Но при этом является исключительной ситуацией, если у меня в модуле для записи файла на сервер человек должен обладать определёнными правами, а он ими не обладает (то есть программист "провтык", и не проверив права доступа выполняет код записи файла).

Вообщем в моём понимании как-то так.
...
Рейтинг: 0 / 0
Делать все методы статическими или класс абстрактным?
    #38065711
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ещё пример... есть модуль управления пользователями. У него в конфигах записаны параметры подключения к базе. Так вот, невозможность соединиться с сервером, отсутствие базы или таблицы в базе - это исключение. Отсутствие пользователя в базе - это нормально (человек пароль неверный ввёл, или просто пользователя такого нету). Тут тоже можно исключение бросить, но зачем? Есть конечно смысл, если библиотека включается единственным инклудом в начале файла, и при какой-либо ошибке (недостатке прав, отсутствии пользователя) останавливает выполнение (что есть логично, так как дальше выполнять ничего не надо, а надо отреагировать на ошибку). Вот тогда бросаем exception, а вот если мы предоставляем интерфейс управления пользователями, то в случае отсутствия пользователя лучше просто вернуть false вместо идентификатора.
...
Рейтинг: 0 / 0
Делать все методы статическими или класс абстрактным?
    #38065720
ещё раз - на "живом" примере...

есть класс file -> в нём есть метод save
при сохранении файла (сохраняем на диск ;) в методе save проверяем количесво свободного места на диске и смотрим размер файла, если размер больше свободного места, бросаем exc "нехватает свободного места" - дальше продолжать метод нет смысла - всё равно не сохранится!!!
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
класс file {
   function save() {
       if(freeSpaceOnDisk < this->size()) {
             throw new myException('blah-blah', 1);
       }
       //логика по сохранению файла
   }
}


те кто используют класс , не\обрабатывают исключения
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
foreach($files as $file) {
   try {
       file->save();
   } catch (myException $e) {
       //тут логика обработки нехватки места
       //полагаю она проста - выход из цикла - т.к. следующему файлу так же не хватит места
       exit;
   }  catch (Exception $e) {
       //тут обрабатываем др. исключения 
       //не критично - записываем лог идём дальше по циклу
   }
}


фуух... надеюсь понятно объяснил, для чего нужны throw ?! ;)

p.s. боюсь тебе рассказывать о существовании блока finnaly ;)))
...
Рейтинг: 0 / 0
Делать все методы статическими или класс абстрактным?
    #38065777
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автордальше продолжать метод нет смысла
есть варианты когда дальше подолжать смысл есть.
авторжесть! пробросить исключение только для того, что бы самому его и поймать в блоке!!!
я за такой подход: функции должны возвращать либо правильный результат, либо исключение.
...
Рейтинг: 0 / 0
Делать все методы статическими или класс абстрактным?
    #38065877
авторесть варианты когда дальше подолжать смысл есть.
ты ошибаешься...
авторя за такой подход: функции должны возвращать либо правильный результат, либо исключение.
спс КЭП!!! но из твоего кода, этого не видно...
...
Рейтинг: 0 / 0
Делать все методы статическими или класс абстрактным?
    #38065911
Фотография r u
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ScareCrowесть варианты когда дальше подолжать смысл есть.
раз можно продолжать дальше, значит это чтото некритичное, те мы можем както исправить или обойти эту ситуацию. это уже не исключение а просто ветвление в логике работы.

исключения кидают в местах где немогут или недолжны исправлять ситуацию. т.е . обработка будет на другом уровне абстракции.
...
Рейтинг: 0 / 0
Делать все методы статическими или класс абстрактным?
    #38065914
Фотография r u
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ScareCrowя за такой подход: функции должны возвращать либо правильный результат, либо исключение.
а зачем тогда в самой функции кидать исключение , тутже его ловить и обрабатывать? явно используете их не по назначению
...
Рейтинг: 0 / 0
Делать все методы статическими или класс абстрактным?
    #38065970
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ScareCrowавтордальше продолжать метод нет смысла
есть варианты когда дальше подолжать смысл есть.
авторжесть! пробросить исключение только для того, что бы самому его и поймать в блоке!!!
я за такой подход: функции должны возвращать либо правильный результат, либо исключение.

очень интересно... разработчики php явно "придерживались" этого мнения, когда писали функции: realpath, intval, iconv, strtotime и т.д.
Я бы придерживался структуры (идеи) используемой самими разработчиками.
...
Рейтинг: 0 / 0
Делать все методы статическими или класс абстрактным?
    #38066204
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор разработчики php явно "придерживались" этого мнения, когда писали функции: realpath, intval, iconv, strtotime и т.д.
осталось выяснить в каком году они и зачем они это делали.
...
Рейтинг: 0 / 0
Делать все методы статическими или класс абстрактным?
    #38066283
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ScareCrowавтор разработчики php явно "придерживались" этого мнения, когда писали функции: realpath, intval, iconv, strtotime и т.д.
осталось выяснить в каком году они и зачем они это делали.
http://php.net/manual/ru/function.strtotime.php Возвращает временную метку в случае успеха, иначе возвращается FALSE. До версии PHP 5.1.0 в случае ошибки эта функция возвращала -1.
Ну, в версии 5.1 исключения уже точно были (и по ходу давно уже). Так что даже после организации поддержки исключений разработчики продолжают придерживаться мнения "ошибка не значит исключение". Просто мне очень интересно, как бы выглядел следующий код (представим, что нам надо было отделить числовые значения от строковых), если бы например intval выбрасывала исключение:
Код: php
1.
if(intval($var)){$res1[]=$var;}else{$res2[]=$var;}


уверен, что кто-то щас напишет:
Код: php
1.
2.
3.
4.
5.
6.
try{
 intval($var);
 $res1[]=$var;
}catch(){
 $res2[]=$var;
}


но тогда начинаются танцы с бубном вокруг "а не ошибка ли это из-за того, что $var является объектом?", и мы всёровно попадаем на if().
Вот теперь вопрос, а есть ли смысл? Может всё таки посчитаем разработчиков умными и предусмотрительными?
...
Рейтинг: 0 / 0
Делать все методы статическими или класс абстрактным?
    #38066291
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
теперь начинаем медитировать зачем те же разработчики сделали ErrorException
...
Рейтинг: 0 / 0
Делать все методы статическими или класс абстрактным?
    #38066296
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторчто нам надо было отделить числовые значения от строковых
Код: php
1.
if(intval($var)){$res1[]=$var;}else{$res2[]=$var;}


дальше разговор бессмысленен.
...
Рейтинг: 0 / 0
Делать все методы статическими или класс абстрактным?
    #38066304
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ScareCrowавторчто нам надо было отделить числовые значения от строковых
Код: php
1.
if(intval($var)){$res1[]=$var;}else{$res2[]=$var;}


дальше разговор бессмысленен.
варианты...!?
...
Рейтинг: 0 / 0
Делать все методы статическими или класс абстрактным?
    #38066317
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Делать все методы статическими или класс абстрактным?
    #38066583
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hett,

Спасибо... забыл о такой :) но смысл то был не в решении задачи, а в представлении кода :) просто не смог придумать нужную задачу, которую нельзя было бы решить иным методом.

P.S.

ScareCrow, так... к слову, вместо intval могла быть любая другая (например самописная) функция.
...
Рейтинг: 0 / 0
Делать все методы статическими или класс абстрактным?
    #38067025
Shitbox2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторда не должен он возвращать к месту... т.к. ты и так находишься в этом месте
Код: php
1.
2.
3.
4.
5.
6.
7.
try {
    ...
    //throw new Exception('Исключение', 1);    
    //ЗДЕСЬ МЫ ЖЕ УЖЕ ЗНАЕМ, ЧТО ЧТО-ТО НЕ ТАК =>
    //вместо перехода в блок catch обрабатываем "ошибку" по месту и двигаемся дальше
    ...
} catch(NotCriticalException $e) {


Тут try и не нужен
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
try {
    ...
    functionWithThrow();
    //ЗДЕСЬ МЫ ЖЕ УЖЕ ЗНАЕМ, ЧТО ЧТО-ТО НЕ ТАК =>
    ...
} catch(NotCriticalException $e) {
    //тут мы это исправляем и должны вернуться обратно в functionWithThrow и продолжить ее выполнение
}

[/quote]
А вот тут хорошо бы.

----------------

На счет исключения при загрузке файла. С местом на диске отличный пример! Смотрите, у нас есть три ошибки: закончилось место на сервере, пользователь пытается загрузить файл большего объема, чем можно и файл не того расширения.

Считаются ли эти ошибки критическими? Ведь пользователь может их исправить, загрузив меньший файл. С другой стороны, если место на сервере практически закончилось, то это на грани провала, т.к. вскоре никто не сможет загружать.

Нужно ли прерывать на таких ошибках скрипт и выдавать их пользователю по-очереди (извините, не то расширение. А сейчас слишком большой) или поступать как с формой и выдавать разом все несоответствия?
...
Рейтинг: 0 / 0
Делать все методы статическими или класс абстрактным?
    #38067075
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторНужно ли прерывать на таких ошибках скрипт и выдавать их пользователю по-очереди
не любите вы своих пользователй
...
Рейтинг: 0 / 0
Делать все методы статическими или класс абстрактным?
    #38067082
автор Ведь пользователь может их исправить, загрузив меньший файл.
пользователь ничего исправить не может - он уже отослал файл, который не влез - код уже отработал и выкинул исключительную ситуацию - всё!!! до следующей отправки файла сервер стоит и молчит!!!
авторНужно ли прерывать на таких ошибках скрипт и выдавать их пользователю по-очереди (извините, не то расширение. А сейчас слишком большой)
не то расширение или размер превышает установленное ограничение - это не исключительная ситуация - это просто ошибка пользовательского ввода, которая не нуждается в throw!!! они (ошибки) обрабатываются совершенно по другому - http://php.net/manual/en/book.filter.php - например так!!!
автор//тут мы это исправляем и должны вернуться обратно в functionWithThrow и продолжить ее выполнение
у тебя не всё впорядке с логикой - советую подтянуть этот пробел, только потом можно продолжать конструктивную беседу!!!

Успехов!
...
Рейтинг: 0 / 0
Делать все методы статическими или класс абстрактным?
    #38067292
Shitbox2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторне любите вы своих пользователйЧего это? Зачем их грузить лишней информацией?

автору тебя не всё впорядке с логикой - советую подтянуть этот пробел, только потом можно продолжать конструктивную беседу!!!Что не так? Мы делаем запрос к БД, но там не оказалось нужной информации, поэтому выходим из всех функций и делаем запрос к резервной БД, если там есть то, что нам надо, возвращаемся обратно и дорабатываем часть скрипта. Можно усугубить и предположить, что наш код — это отдельная библиотека и мы не знаем, есть ли резервная БД или другой способ получения недостающих данных, поэтому тут логично выбросить throw, чтобы тот кто использует нашу библиотеку сам решил, что ему делать
...
Рейтинг: 0 / 0
25 сообщений из 104, страница 4 из 5
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Делать все методы статическими или класс абстрактным?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]