我是PHP异常处理和SOAP的新手。由于某些原因,我无法捕获SoapFault。我也不知道原因。soap服务器不是我的。
try {
$contact_id = $objSoapClient->getContactIdFromVisitorId('12345');
}
catch (SoapFault $sf) {
echo "Soapfault";
}
catch (Exception $e) {
echo "Exception";
}我特意传入了不好的id 12345。当我启用错误时,我看到下面的消息SoapFault exception: [SOAP-ENV:Client] Invalid Visitor ID。但是,我的catch SoapFault块和catch Exception块都没有被命中过。为什么?
发布于 2011-06-17 00:10:03
问题原来是我的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
));发布于 2011-06-16 23:46:43
您提交的代码似乎是正确的。这是我唯一想到的事情。
也就是说,如果代码位于定义名称空间的类中,您的代码将无法工作,因为它将尝试将异常引用为不存在的\ namespace \Exception。允许“被动”引用,例如catch子句或instanceof表达式中的引用,因为缺少的类可能会在以后加载。
为了让它起作用,你必须在类名前面加上一个斜杠(即\Exception),告诉PHP从全局空间(或根,如果你想叫它) ( 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。
https://stackoverflow.com/questions/6374345
复制相似问题