Php 是否仅捕获SimpleXML异常?
SimpleXML抛出一个常规异常,如果类相同,我如何将其与其他异常区分开来?我做了一个变通方法,捕获并调查特定的错误消息Php 是否仅捕获SimpleXML异常?,php,exception,exception-handling,simplexml,Php,Exception,Exception Handling,Simplexml,SimpleXML抛出一个常规异常,如果类相同,我如何将其与其他异常区分开来?我做了一个变通方法,捕获并调查特定的错误消息 try{ //... }catch(Exception $e){ if(!strstr($e->getMessage(), 'XML')) throw $e; } 然后重新引用与XML处理无关的所有内容。您遇到的问题是非常局部的,可以轻松处理 而不是使用 $xml = new SimpleXMLElement($buffer); (例外情况是$bu
try{
//...
}catch(Exception $e){
if(!strstr($e->getMessage(), 'XML')) throw $e;
}
然后重新引用与XML处理无关的所有内容。您遇到的问题是非常局部的,可以轻松处理 而不是使用
$xml = new SimpleXMLElement($buffer);
(例外情况是$buffer=''
)
您可以使用一个函数,该函数告诉您在不引发异常的情况下加载缓冲区是否有效:
$xml = simplexml_load_string($buffer);
如果出现错误,$xml
将为false。因此,您首先没有异常问题
此外,如果您对更详细的错误处理感兴趣,如检查函数调用的先决条件和后决条件,我建议您也使代码更稳定:
if (!is_string($buffer) || !strlen($buffer)) {
throw new UnexpectedValueException("String with length required");
}
$xml = simplexml_load_string($buffer);
if (!$xml) {
throw new UnexpectedValueException('String could not be parsed as XML');
}
这还显示了如何抛出您喜欢的异常。但是,由于您只关心一行代码,因此可以捕获任何异常并处理存在的单个错误情况:
try {
$xml = new SimpleXMLElement($buffer);
} catch (Exception $e) {
$xml = false;
}
但是,使用simplexml\u load\u string
可能更方便
除此之外,您还可以启用libxml的内部错误报告,并了解有关创建对象时实际问题的更多信息:
$saved = libxml_use_internal_errors(true);
$xml = simplexml_load_string($buffer);
$errors = libxml_get_errors();
libxml_use_internal_errors($saved);
if (!$xml) {
var_dump($errors); // create and throw a specific exception here based on errors.
}
但是,空字符串不会产生任何错误,如果它带有先决条件检查,最好小心
此外:
- 在加载时将cron作业保存为其他文件名,仅在准备就绪时替换该文件
- 以只读方式打开文件