【发布时间】:2015-10-03 01:29:43
【问题描述】:
在提出问题之前,我参考下面的答案
由于我不清楚这一点,我提出了这个问题。所以请有人不要关闭这个问题,因为它是重复的。
我有下面的 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