Есть ли статический способ бросить исключение в php

Есть ли "статический" способ выброса исключения в php?

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

Я пробовал это:

[email protected]_query( $query ) or throw new Exception(' Query Failed ');

но он не работает.

И я использую функцию, основанную на функции throwException() из этого комментария в PHP: Руководство по исключениям, но я хотел бы знать, есть ли статический способ сделать это, не делая класс.

Ответ 1

Вы не сможете напрямую делать 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);
}

Ответ 2

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

function throwException($message = null, $code = null) {
    throw new Exception($message, $code);
}

$re = mysql_query($query) or throwException('Query Failed');

Ответ 3

Вы также можете попробовать что-то вроде

mysql_query($query);

if (mysql_error()) {
  throw new Exception(...);
}

as mysql_error() возвращает пустую строку, если не было ошибки, которая оценивается как false.