Обработка результатов реботы функции.

XiMiK

Новичок
Обработка результатов реботы функции.

Вернулся к программированию на пхп после перерыва и столкнулся с проблемой. Как-то неудобно возвращать false или верное значение, а потом проверять выдала ли ошибку или нет. Во-первых, верное значение может быть нулём. Тогда необходимо проверять на строгое соответствие типа (=== false, === 0), что имхо не очень красиво. В конце концов когда мы проверяем не очень ясно какая ошибка возникла при выводе false. То есть выводит полезное значение надо одним способом (одним каналом), а код ошибки другим.

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

Интересно кто как выходит из данной ситуации. Вопрос относится скорее к стилю программирования.
 

Духовность™

Продвинутый новичок
что имхо не очень красиво
почему это? В мане полно функций, возвращающих число (в т.ч. и 0) и FALSE: http://ru2.php.net/manual/ru/function.strpos.php

Например собирать информацию об ошибках в теле ф-ции в специальный объект/ячейку массива и выдавать результат в составном виде (данные + ошибка).
функция должна быть постая и четкая. Если функция такая навороченная, что приходится аж массив ошибок (!!!) отдавать, то это не правильная архитектура.
 

XiMiK

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

но обрабатывать ошибки всё равно надо не на уровне or die(), а хотя бы $err->log('doesn`t work '). в таком случае придётся выносить обработку из ф-ции во внешную среду. это мне и не нравится. я прежде всего имею в виду ф-ции которые имеют узкое назначение. делать выборку из базы например

или всё же никто не заморачивается?
 

Lightning

Трудоголик
но обрабатывать ошибки всё равно надо не на уровне or die(), а хотя бы $err->log('doesn`t work '). в таком случае придётся выносить обработку из ф-ции во внешную среду.
значит throw/try/catch
 

XiMiK

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

Это для дебага имеет значение. вардампы это всё понятно, но выяснение где произошла ошибка отнимает время. Если контролировать взаимодействие можду функциями можно облегчить процесс как мне кажется.
 

С.

Продвинутый новичок
Если ошибка нештатная, то умирай прямо в функции с нужными словами между скобок. Если ошибка штатная, то и сообщений никаких не нужно.
 
Сверху