如何解决PHP SoapFault未被异常处理程序捕获
| 我是PHP异常处理和SOAP的新手。由于某种原因,我无法抓到SoapFault。我不知道为什么。 soap服务器不是我的。try {
$contact_id = $objSoapClient->getContactIdFromVisitorId(\'12345\');
}
catch (SoapFault $sf) {
echo \"Soapfault\";
}
catch (Exception $e) {
echo \"Exception\";
}
我故意传递了错误的ID12345。启用错误后,我看到以下消息“ 1”。但是,我的catch SoapFault块和我的catch Exception块都没有被击中。为什么?
解决方法
您提交的代码似乎正确。这是我唯一想到的事情。
话虽如此,如果代码位于定义命名空间的类中,则您的代码将无法工作,因为它将尝试将Exception引用为\\ namespace \\ Exception,而该\\ namespace \\ Exception不存在。允许使用“被动”引用,例如
catch
子句或instanceof
表达式中的那些,因为稍后可能会丢失缺少的类。
为了使其正常工作,您必须在类名前面加上斜杠(即\\ Exception),以告诉PHP从全局空间(或从根目录开始,如果要调用它,则使用root)(PHP)而不是名称空间来使用PHP。 ;
<?php
namespace test;
class Foo
{
public function bar()
{
try
{
something_that_might_break();
}
catch (\\Exception $e)
{
// this will work
}
}
}
?>
您可以在此处找到许多有关名称空间的信息:http://php.net/manual/en/language.namespaces.php。
, 问题出在我的SoapClient声明上。必须设置一个exceptions参数才能触发异常。
$objSoapClient = new SoapClient(\'https://mywebservice.com/foo.wsdl\',array(
\"trace\" => false,\"exceptions\" => true,// <-------------- This!!!
\'login\' => \'username\',//username
\'password\' => \'password\',//password
\'features\' => SOAP_SINGLE_ELEMENT_ARRAYS + SOAP_USE_XSI_ARRAY_TYPE
));
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。