Есть ли «статический» способ выброса исключения в php?
Мне нужно создать исключение, когда запрос mysql завершится с ошибкой.
Я попробовал это:
$re=@mysql_query( $query ) or throw new Exception(' Query Failed ');
но он не работает.
И я использую функцию, основанную на функции throwException()
из этого комментария в руководстве PHP: Исключения , но я хотел бы знать, есть ли статический способ сделать это, не делая класс.
Вы не сможете напрямую делать or throw new Exception();
потому что throw
– это утверждение, а не выражение. Так как or
действительно является оператором, он ожидает, что его операнды будут выражением (вещи, которые оценивают некоторые значения).
Вы должны сделать это вместо этого:
$re = mysql_query($query); if (!$re) { throw new Exception('Query Failed'); }
Если вы пытаетесь использовать throwException()
предложенную в этом комментарии к PHP-руководству, поскольку webbiedave указывает, что комментарий говорит о том, что вам нужно вызвать эту функцию вместо оператора throw
напрямую, например:
$re = mysql_query($query) or throwException('Query Failed');
На PHP нет правила, в котором говорится, что вам нужно выкидывать исключения из метода класса. Пока есть какой-то способ поймать это исключение, все в порядке. Если вы имеете в виду, что хотите исключать исключения, не используя класс Exception
, вам нужно. Исключения представляют собой объекты по своей природе; вы не можете генерировать исключение, которое не является объектом (или не наследуется от класса Exception
).
Если вы не хотите генерировать исключения, но повышаете ошибку, которую часто видят из PHP (уведомления, предупреждения и фатальные ошибки), используйте trigger_error()
.
$re = mysql_query($query); if (!$re) { trigger_error('Query Failed', E_USER_ERROR); }
Комментарий, который вы указываете, указывает на то, что выброс исключения таким образом не будет работать. В нем говорится, что вы должны поместить его в функцию:
function throwException($message = null, $code = null) { throw new Exception($message, $code); } $re = mysql_query($query) or throwException('Query Failed');
Вы также можете попробовать что-то вроде
mysql_query($query); if (mysql_error()) { throw new Exception(...); }
поскольку mysql_error()
возвращает пустую строку, если не было ошибки, которая вычисляется как false
.