【问题标题】:Error handling using try catch block in PHP [duplicate]在 PHP 中使用 try catch 块处理错误 [重复]
【发布时间】:2015-10-03 01:29:43
【问题描述】:

在提出问题之前,我参考下面的答案

When to use Try Catch blocks

由于我不清楚这一点,我提出了这个问题。所以请有人不要关闭这个问题,因为它是重复的。

我有下面的 PHP 脚本来获取最新的货币价值。由于我使用的是 API,我想可能会有一些停机时间或类似情况。所以如果 API 没有提供,我必须分配一个默认值。

我知道还有一些其他方法,例如 isset()!empty()

但我想使用try{} catch(){}

下面的脚本没有任何错误,它可以正常工作。

<?php
try {
    $return = file_get_contents("http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20yahoo.finance.xchange%20where%20pair%20in%20%28%22AEDUSD%22%29&env=store://datatables.org/alltableswithkeys");
    $xml=simplexml_load_string($return) or die("Error: Cannot create object");

    $coversionRate = (string)$xml->results->rate->Rate;
    echo '<pre>'; print_r($coversionRate);
} catch (Exception $e) {
    echo 'Caught exception: ',  $e->getMessage(), "\n";
}
?>

现在,我在 API URL 中犯了一个错误,所以它应该进入 catch() 块并且应该给出软消息。但它会引发警告信息。

在这种情况下我可以使用try(){..} catch() {..}吗?

【问题讨论】:

  • try/catch 将捕获 PHP 或其模块中发生的错误(即 mysqli 无法连接到数据库服务器),而不是某些外部服务。 file_get_contents 收到来自 Yahoo API 的响应,它不知道它是否是错误的。由您来解析响应并确定请求是否成功。
  • @martynasma 你是对的,因为我将无效的 url 传递给文件获取内容方法,它无法加载 URL 并且 PHP 正确抛出错误,该错误无法处理?
  • 我想 file_get_contents 函数不会抛出异常。 “内部 PHP 函数主要使用错误报告,只有现代面向对象的扩展使用异常。但是,错误可以简单地转换为带有 ErrorException 的异常。”如本页所述:php.net/manual/en/language.exceptions.php

标签: php error-handling try-catch


【解决方案1】:

try..catch 处理异常。您显示的任何代码都不会出现throw 异常。所以catch 块永远不会被调用。 错误 是 PHP 中的其他东西,不是例外。错误只能被静默(使用@ 或全局error_reporting 设置)或使用定义的error handler 全局处理。

try..catch 根本不适用于您的代码,无论您多么希望它是。


话虽如此,您可以使用自定义错误处理程序将任何错误变成异常。这就是ErrorException class 的用途。请参阅手册中的示例。这将使您能够使用try..catch 进行所有操作。可以说这不是一个坏主意,因为 PHP 的拆分错误/异常机制 很奇怪。

【讨论】:

  • 使用@是消除错误的标准方法?所以我认为隐藏错误是不道德的方式?
  • 我从来没有说过这是个好主意,只是说它是可能的。
  • 另一个问题几乎可以回答 IMO 的问题。此外,您的答案并不是一个真正的答案,如果有的话,您应该将其发布为评论。您只是将人们引向另一个问题,该问题真正标记为重复。
  • 好的 :-( 感谢您的宝贵时间
猜你喜欢
  • 2016-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-03
相关资源
最近更新 更多