<rmcreative>

RSS

PHP: превращаем ошибку в исключение локально

20 февраля 2021

В PHP часто для обработки ошибки в функциях вроде dns_get_record() используют оператор @:

$result = @dns_get_record($hostname, DNS_A);
if (!$result) {
    throw new \RuntimeException('Unable to get record.');
}

Проблем несколько:

  • Использование @ не очень хорошо сказывается на производительности
  • Часто подавляется слишком много разных ошибок.

Есть способ лучше:

set_error_handler(
    static function (int $errorNumber, string $errorString) use ($hostname): ?bool {
         throw new \RuntimeException(
             sprintf('Unable to get record: "%s". ', $hostname) . $errorString,
              $errorNumber
         );
    }
);
 
$result = dns_get_record($hostname, DNS_A);
 
restore_error_handler();

Комментарии RSS

  1. №12139
    X Y Z
    X Y Z 24 февр. 2021 г., 16:26:59
    $result = @dns_get_record($hostname, DNS_A);
    if (!$result) {
        $error = error_get_last ( );
        throw new \RuntimeException($error['message']);
    }
  2. №12140
    Sam
    Sam 25 февр. 2021 г., 16:47:24

    X Y Z, да, одну из проблем решает.

  1. Почта опубликована не будет.

  2. Можно использовать синтаксис Markdown или HTML.

  3. Введите ответ в поле. Щёлкните, чтобы получить другую задачу.