|
|
|
Делать все методы статическими или класс абстрактным?
|
|||
|---|---|---|---|
|
#18+
Shitbox2Еще... Если возникнет ситуация, что в системе уже будет класс Album или Image, как решить эту проблему? Такой вариант покатит? action.php Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. lib/dg.php и lib/magickwand.php Код: php 1. 2. 3. 4. 5. лучше придумай своим классам какой-нить префикс нормальный (например Sb - взято с твоего ника), да и пиши классы SbAlbum, SbImage. Я пространства имён никогда в php не пользовал... Это походу менее удобно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2012, 17:58 |
|
||
|
Делать все методы статическими или класс абстрактным?
|
|||
|---|---|---|---|
|
#18+
Вот не знаю, не знаю. В крутых движках используется. Да и спецы говорят, что с ними лучше, только примеров не приводят. В общем, нужно получить консультацию у человека, который с ними на ты. В одном движке, например, подключение экземпляра класса описывается так: $db = \lib\db(); А так же стоит ли использовать ErrorException или слишком накручено будет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2012, 19:10 |
|
||
|
Делать все методы статическими или класс абстрактным?
|
|||
|---|---|---|---|
|
#18+
Вопрос по исключениям. Сейчас обрабатываю их так: Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. В книжках рекомендуют использовать Exception. И с одной стороны к ним подходил и с другой, никак не догоняю куда их прицепить в моем случае. Т.е. прицепить не трудно, но сложность понимания и размер кода увеличиваются в полтора раза. Да и, вообще, не видел рабочих примеров с подобными конструкциями. Обычно всегда переменная errors заводится, как у меня. А вы использовали бы Exception в подобном случае и как? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.11.2012, 20:18 |
|
||
|
Делать все методы статическими или класс абстрактным?
|
|||
|---|---|---|---|
|
#18+
Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. Код: php 1. 2. 3. 4. 5. 6. ps. die использовать плохой тон. Если будите Unit тесты писать он вам все тесты поломает ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.11.2012, 20:41 |
|
||
|
Делать все методы статическими или класс абстрактным?
|
|||
|---|---|---|---|
|
#18+
Т.е. предлагаете вынести swith в место проверки... Так не получится, т.к., к примеру, case 5: берет свои значения не от $file['error'], а из другого места (проверка data-lenght). Но, в общем-то можно передавать так же номер, и перебор делать уже в catch. Код и вправду выглядит здорово. Спасибо за ответ! ) P.S. die() там временно как заглушка. Код будет отправляться как ответ серверу ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.11.2012, 23:32 |
|
||
|
Делать все методы статическими или класс абстрактным?
|
|||
|---|---|---|---|
|
#18+
авторберет свои значения не от $file['error'], а из другого места (проверка data-lenght) вот тут какраз и появлятсья прелесть exception. Они позваляют "прыгать не на 1 уровень вверх как делает это return false; а сразу на несколько. Чтов ам мешает прямо там при проверке data-length выкидывать exception ? Какраз для этого они и нужны. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2012, 10:41 |
|
||
|
Делать все методы статическими или класс абстрактным?
|
|||
|---|---|---|---|
|
#18+
Там и выкидываю. А потом собираю все коды в catch и прогоняю по списку, группируя как надо... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2012, 02:08 |
|
||
|
Делать все методы статическими или класс абстрактным?
|
|||
|---|---|---|---|
|
#18+
прочёл топ (посмотрел сорцы) - бегло... совет - почитай про основы ООП - любую книгу! - особое внимание удели главам о связях и зависимостях! class Album там вообще не нужен никакой инит - используй конструктор! выдели логику по работе с бд в отдельный класс! не привязывайся к пост\гет - уже советовали! вообще не понял - почему "ALBUM"?! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2012, 11:30 |
|
||
|
Делать все методы статическими или класс абстрактным?
|
|||
|---|---|---|---|
|
#18+
Спасибо за совет. Книжку на днях прочел, уже все переделал в традициях ООП, как разберусь со всеми проблемами, так выложу. К примеру с тем же конструктором возникли вопросы: /topic/987490&pg=-1 Думаю, что должно быть готовое решение такой задачи. Что касается этой ветки, то возникла сложность с исключениями: Код: php Т.е., чтобы сделать все с одним блоком catch, придется брать в try, вообще, весь код. А если в этом коде еще и другие блоки try будут, например, относящиеся к БД, то произойдет их пересечение и будет все очень запутанно. На счет того, чтобы без init() делать... Ну не в конструктор же логику выносить. Просто init() будет запускаться из конструтора. Или это идет вразрез с ООП? Обертку над БД, наверное, заменю комментарием, все равно в каждом движке она своя... Чтобы не усложнять модуль. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2012, 14:35 |
|
||
|
Делать все методы статическими или класс абстрактным?
|
|||
|---|---|---|---|
|
#18+
авторНа счет того, чтобы без init() делать... Ну не в конструктор же логику выносить. Просто init() будет запускаться из конструтора. Или это идет вразрез с ООП? вразрез пойдёт тогда, когда тебе или др. программисту будет неудобно использовать твоё творение! Остальное ИМХО - надумано ;) обычно, в конструкторе инициируют объект, а всё остальное делают через методы класса Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. авторЧтобы не усложнять модуль. Module !== Class когда определишься, что ты создаёшь, тогда придёт осознание всего остального! Успехов! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2012, 12:39 |
|
||
|
Делать все методы статическими или класс абстрактным?
|
|||
|---|---|---|---|
|
#18+
ещё совет! не распихивай эти throw по всему коду - они используются немного ;) в других целях... к примеру, заведи переменную класса - $error = FALSE - и записывай код ошибки в неё! после проверяй, если $error не пустая, то была ошибка! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2012, 12:58 |
|
||
|
Делать все методы статическими или класс абстрактным?
|
|||
|---|---|---|---|
|
#18+
как-то так...ещё совет! не распихивай эти throw по всему коду - они используются немного ;) в других целях... к примеру, заведи переменную класса - $error = FALSE - и записывай код ошибки в неё! после проверяй, если $error не пустая, то была ошибка! а сами ошибки вынеси в отдельный участок кода (и создай статические константы класса)... где для каждой константы дай адекватное название типа ELOAD или LOADERROR (по аналогии SAVEERROR, SIZEERROR и т.д.) и соотнеси его с кодом ошибки, а по коду подтягивай текст ошибки (какой-нить массив создай...). Просто я думаю в нынешнем виде сменить язык модуля или просто изменить текст ошибки будет очень сложно... а это уже не идеальный модуль. Сами константы позволят легче ошибками управлять из вне (если кому вдруг понадобится), ведь запомнить имя констант легче чем номера ошибок.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2012, 13:35 |
|
||
|
Делать все методы статическими или класс абстрактным?
|
|||
|---|---|---|---|
|
#18+
Изначально у меня и было все без throw и складывалось в массив ошибок. Только вчера его убрал. Вообще, с ошибками надо определиться. Обязательно должны быть исключения/ошибки для пользователя. Это: - файл слишком большой (не должен превышать Х МБ) - файл неверного типа (в т.ч. если не удалось обработать) - превышено кол-во загружаемых файлов - закончилось отведенное место - браузер не поддерживает загрузку - ошибка сервера (попробуйте загрузить файл позже) Внутренних ошибок загрузки будет больше, но они несут смысл только при отладке, поэтому по умолчанию отдельно не выводятся. Соответственно, константы для них тоже не стоит заводить. Далее о константах. К примеру, нужно вывести: «файл не должен превышать Х МБ», где Х переменная. Это уже в константу не запихнуть. Опять же не знаю как лучше, формировать текст ошибки, на сервере или отсылать код + дополнительные значения (те же Х МБ) JS-скрипту и там уже обрамлять в текст. P.S. В каких же тогда целях используется throw? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2012, 14:32 |
|
||
|
Делать все методы статическими или класс абстрактным?
|
|||
|---|---|---|---|
|
#18+
как-то так...ещё совет! не распихивай эти throw по всему коду - они используются немного ;) в других целях... к примеру, заведи переменную класса - $error = FALSE - и записывай код ошибки в неё! после проверяй, если $error не пустая, то была ошибка! Ага и потом програмист возмет этот модуль подключит и будет гадать, как же мне понять почему не сработал функция? То ли в $error смотреть, то ли в $error_code, То ли куда. Зачем придумывать что то, если есть Exception который умею тработать и с $message и с $code ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2012, 14:35 |
|
||
|
Делать все методы статическими или класс абстрактным?
|
|||
|---|---|---|---|
|
#18+
ИМХО, просто исходя из определения слова «исключение» (а ведь называют их именно исключениями, а не ошибками и проч.), они нужны для обработки любых событий, не входящих в основную ветку программы. Т.е. это ошибки любого уровня критичности, пользовательские промахи (напр., неверный логин и пароль), внеплановые внутренние проверки и проч. То, что они не до конца в ПХП реализованы, другой вопрос. Сейчас плохо, потом хорошо сделают, если уж ООП в этом направлении развивается... В связи с исключениями появилось два вопроса: 1. throw без блока try не работает (т.е. вызывает ошибку), поэтому если захочу использовать функцию dbconnect в другом месте Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. то она без внешнего блока try просто не будет работать 2. Немного напрягает то, что блок catch нельзя отделить от try. Либо просто не умею их готовить. К примеру Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. Основной код слишком загроможден проверками. Попробуем избавиться: а) можно вынести исключения в общий блок. Но тогда наступит момент, когда этим блоком придется обертывать всю программу Код: php 1. 2. 3. 4. 5. 6. 7. б) Тоже самое, только более ООПшно и в 20 раз сложнее Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. Как поступить лучше? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2012, 15:50 |
|
||
|
Делать все методы статическими или класс абстрактным?
|
|||
|---|---|---|---|
|
#18+
Shitbox2, Shitbox2hrow без блока try не работает (т.е. вызывает ошибку), поэтому если захочу использовать функцию dbconnect в другом месте Работает, пробрасывает ошибку выше если она Вами не перехватывается то и будет показана пользователю - всё логично. Shitbox2можно вынести исключения в общий блок. Но тогда наступит момент, когда этим блоком придется обертывать всю программу Зачем обёртывать всё программу??? Не понятно. Если Вы будуту использовать их сознательна для сигнализации ошибок, то сам бог велел Вам самому их ловить. Если Вы хотите пользователю как-то по своему показывать об ошибке - то ставте свой глобальный обработчик прерываний. Shitbox2Как поступить лучше? Последняя лесенка - ужасна в практическом плане. Лучше в этом случае что бы исключения нужного типа генерили сами методы. И тогда Вам либо в общём try их ловить "если надо", если надо чтоб выше то вообще try catch Не нужен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2012, 17:05 |
|
||
|
Делать все методы статическими или класс абстрактным?
|
|||
|---|---|---|---|
|
#18+
авторАга и потом програмист возмет этот модуль подключит и будет гадать, как же мне понять почему не сработал функция? То ли в $error смотреть, то ли в $error_code, То ли куда. хм... вообще-то throw - это как-бэ своё исключение... например Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. проверяется\обрабатывается оно как-бэ не в самом классе, а за его пределами, по усмотрению тех программистов, которые будут использовать класс! а если программер будет обрабатывать\пробрасывать все возможные исключения в коде класса, то и класс он никогда не напишет... (что, собственно, мы и наблюдаем у ТС ;) авторЗачем придумывать что то, если есть Exception который умею тработать и с $message и с $code ? вызов exc довольно накладная процедура и, по пустякам (как правило!) его не вызывают! авторИМХО, просто исходя из определения слова «исключение» (а ведь называют их именно исключениями, а не ошибками и проч.), они нужны для обработки любых событий, не входящих в основную ветку программы. Т.е. это ошибки любого уровня критичности, пользовательские промахи (напр., неверный логин и пароль), внеплановые внутренние проверки и проч. То, что они не до конца в ПХП реализованы, другой вопрос. Сейчас плохо, потом хорошо сделают, если уж ООП в этом направлении развивается... ты ошибаешься! то, что ты пытаешься подвести под опр. исключение, на самом деле и есть банальнейший error, который не нуждается в отдельной обработке... зы: вполне себе нормально они проработаны в PHP Код: php 1. 2. 3. 4. 5. ты не понимаешь самого простого - любой коннект и без тебя (прекрасно) выкинет ошибку при сбое... как эту ошибку будет обрабатывать программист, использующий твой класс, тебя вообще не должно волновать!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2012, 20:36 |
|
||
|
Делать все методы статическими или класс абстрактным?
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2012, 21:04 |
|
||
|
Делать все методы статическими или класс абстрактным?
|
|||
|---|---|---|---|
|
#18+
Приметил конструкцию Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Она мне кажется верной и очень ООПшной, хотя в моем случае это и означает обернуть в try всю программу. И как раз в топике выше была поднята тема, которую можно вынести в фундаментальный вопрос: кто должен обрабатывать исключения, тот кто написал класс или тот кто этот класс использует? Что на этот счет говорят практики программирования? В случае с классом Album ловля исключения за пределами класса вполне оправдана, т.к. в коде он вызывается только в одном месте, а как быть с классом Image и подобными? Оборачивать каждый вызов в try-catch? Идеальный вариант, когда в случае неудачи функция/класс молча возвращает false, но в случае необходимости мы могли бы узнать конкретно чем вызвана неудача. Т.е. функцией можно было бы пользоваться так: Код: php 1. или так: Код: php 1. 2. 3. 4. 5. Это к примеру. В современно ПХП такие механизмы существуют? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2012, 23:50 |
|
||
|
Делать все методы статическими или класс абстрактным?
|
|||
|---|---|---|---|
|
#18+
авторкто должен обрабатывать исключения, тот кто написал класс или тот кто этот класс использует тот кому это исключение нужно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2012, 03:09 |
|
||
|
Делать все методы статическими или класс абстрактным?
|
|||
|---|---|---|---|
|
#18+
Наверное, вопрос не к ПХПшникам, а к тем, кто знаком с более ООПшными языками. В какую сторону развиваются исключения? Можно ли предположить, что в будущем механизм try ... catch будет использоваться для любых исключительных ситуаций и валидаций? Например, появится оператор продолжения скрипта (если ошибка не критична, но ее нужно зарегистрировать) или оператор повторения блока try, если ошибка исправлена? Код: php 1. 2. 3. 4. 5. 6. 7. 8. Или этот механизм останется только для узкоспециализированных ситуаций? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2012, 15:22 |
|
||
|
Делать все методы статическими или класс абстрактным?
|
|||
|---|---|---|---|
|
#18+
авторНапример, появится оператор продолжения скрипта Код: php 1. 2. 3. 4. 5. авторператор повторения блока try, если ошибка исправлена Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2012, 15:28 |
|
||
|
Делать все методы статическими или класс абстрактным?
|
|||
|---|---|---|---|
|
#18+
Круто! Но не могу найти ничего о NotCriticalException (и код не работает). Он в PHP есть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2012, 17:42 |
|
||
|
Делать все методы статическими или класс абстрактным?
|
|||
|---|---|---|---|
|
#18+
нет. это ты сам делаешь исключение. class NotCriticalException extends Exception ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2012, 18:00 |
|
||
|
|

start [/forum/topic.php?fid=23&msg=38054356&tid=1464338]: |
0ms |
get settings: |
7ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
142ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
56ms |
get tp. blocked users: |
1ms |
| others: | 231ms |
| total: | 464ms |

| 0 / 0 |
