Духовность™
Продвинутый новичок
Исключения подразумевают код, который их будет отлавливать. trigger_error просто выводит ни на что не влияющий warning. Использовать ли в ОО системах trigger_error? Или работать исключительно с исключениями?
допустим варнинг. ок. не суть важно.как раз таки trigger_error выводит не варнинг а то, что тебе надо выести, плюс оно ловится назначением set_error_handler()
public function getMethodNameByKeyWithPrefix($property_name, $action = 'set')
{
$key = preg_replace('~^' . static::$db_field_prefix . '_([a-z0-9_]+)$~', '$1', $property_name);
if (isset(static::$model_attributes[$key]))
{
$args = explode('_', $key);
$count = count($args);
for ($i = 0; $i < $count; $i++)
{
$args[$i][0] = strtoupper($args[$i][0]);
}
$key = implode('', $args);
if (!in_array($action, array('set', 'get')))
{
trigger_error('Указан некорректный action <b>' .
$action .
'</b> в контексте вызова метода <b>' .
__METHOD__ . '</b>', E_USER_WARNING);
return null;
}
return $action . $key;
}
return null;
}
так вопрос в том, а надо ли клиентскому коду ловить эти исключения или достаточно warning-a, который запишется в лог и его посмотрит разработчик..Может тут стоит использовать InvalidArgumentException или UnexpectedValueException?
У него вместо исключения возврат null. Тоже в общем нормально. Но когда тебе нужно в пользовательском коде более подробно знать почему вернулся null(файла нужного не было или база не подключилась) - тогда исключения удобны.Покажи ради интереса место вызова метода getMethodNameByKeyWithPrefix().
А чем плохо, если разработчик сразу увидит проблему, а не потом, в логе, в который он может и не заглянуть?который запишется в лог и его посмотрит разработчик..
тем, что условия, приводящие к возникновению нефатальной ошибки, могут возникнуть не сразу, а спустя несколько лет работы сайта, и сайт ляжет, а если писать в лог некритичные ситуации, то ничего глобально страшного не произойдётА чем плохо, если разработчик сразу увидит проблему, а не потом, в логе, в который он может и не заглянуть?
это если "условия, приводящие к возникновению нефатальной ошибки", будут воспроизводиться постоянно.и сайт ляжет
А если вы не будете писать их в лог, вы не узнаете, постоянно это случается или раз в пятилетку.это если "условия, приводящие к возникновению нефатальной ошибки", будут воспроизводиться постоянно.
java.sql.SQLException: The table 'userblocks' is full
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1075)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3566)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3498)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1959)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2113)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2568)
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2113)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2409)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2327)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2312)
at org.apache.commons.dbcp.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:105)
at org.apache.commons.dbcp.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:105)
at ru.bestpersons.structs.BPPreparedStatement.executeUpdate(BPPreparedStatement.java:51)
at ru.bestpersons.storages.BlocksStorage.getUserBlocks(BlocksStorage.java:188)
at _jsp._index__jsp._jspService(index.jsp:413)
at com.caucho.jsp.JavaPage.service(JavaPage.java:61)
at com.caucho.jsp.Page.pageservice(Page.java:587)
at com.caucho.server.dispatch.PageFilterChain.doFilter(PageFilterChain.java:192)
at org.tuckey.web.filters.urlrewrite.UrlRewriteFilter.doFilter(UrlRewriteFilter.java:738)
at com.caucho.server.dispatch.FilterFilterChain.doFilter(FilterFilterChain.java:76)
at ru.bestpersons.web.LangFilter.doFilter(LangFilter.java:240)
at com.caucho.server.dispatch.FilterFilterChain.doFilter(FilterFilterChain.java:76)
at com.caucho.server.webapp.WebAppFilterChain.doFilter(WebAppFilterChain.java:178)
at com.caucho.server.dispatch.ServletInvocation.service(ServletInvocation.java:241)
at com.caucho.server.http.HttpRequest.handleRequest(HttpRequest.java:268)
at com.caucho.server.port.TcpConnection.run(TcpConnection.java:586)
at com.caucho.util.ThreadPool$Item.runTasks(ThreadPool.java:690)
at com.caucho.util.ThreadPool$Item.run(ThreadPool.java:612)
at java.lang.Thread.run(Thread.java:619)
А разве речь шла о том чтобы не писать в лог? ТС спрашивает что использовать, триггер или исключения. А писать логи при использовании исключений религия не позволяет? И что сложного в обработке исключения? Если по логике приложения исключение невозможно обработать исключение незаметно для пользователя, то показываем пользователю страничку с извинениями, при этом записав в лог и отправив сообщения админам, разработчикам и т.д.А если вы не будете писать их в лог, вы не узнаете, постоянно это случается или раз в пятилетку.
то есть на каждый php warning/notice кидать исключения? или warning/notice полностью игнорировать?вместимости. Исключения полностью заменяют его, добавляя при этом новые возможности.
ошибки и исключения — это совершенно разные инструменты для решения совершенно разных задач:
ошибка — не поправимая ситуация;
исключение – позволяет прервать выполнение каскада функций и пробросить некоторую информацию. Что-то вроде глобального оператора return. Если у Вас нет каскада, то вам достаточно использовать if или return.