在提出问题之前,我在下面提到答案
由于我没有明白这一点,我提出这个问题。所以请有人不要关闭这个问题,因为它是重复的。
我在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() {..}
吗?
答案 0 :(得分:2)
try..catch
处理例外。您展示的所有代码都不会throw
例外。因此永远不会调用catch
块。 错误是PHP中的其他内容,不是例外。错误只能被静音(使用@
或全局error_reporting
设置)或使用已定义的error handler进行全局处理。
try..catch
根本不适用于您的代码,无论您想要的是多少。
话虽如此,您可以使用自定义错误处理程序将任何错误转换为异常。这就是ErrorException
class的用途。请参阅手册中的示例。这样您就可以使用try..catch
来处理所有事情。可以说这不是一个坏主意,因为PHP的拆分错误/异常机制是很奇怪。