首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >异常处理程序未捕获PHP SoapFault

异常处理程序未捕获PHP SoapFault
EN

Stack Overflow用户
提问于 2011-06-16 23:24:41
回答 2查看 26.2K关注 0票数 19

我是PHP异常处理和SOAP的新手。由于某些原因,我无法捕获SoapFault。我也不知道原因。soap服务器不是我的。

代码语言:javascript
复制
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块都没有被命中过。为什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-06-17 00:10:03

问题原来是我的SoapClient声明。要触发异常,必须设置exceptions参数。

代码语言:javascript
复制
$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 
));
票数 29
EN

Stack Overflow用户

发布于 2011-06-16 23:46:43

您提交的代码似乎是正确的。这是我唯一想到的事情。

也就是说,如果代码位于定义名称空间的类中,您的代码将无法工作,因为它将尝试将异常引用为不存在的\ namespace \Exception。允许“被动”引用,例如catch子句或instanceof表达式中的引用,因为缺少的类可能会在以后加载。

为了让它起作用,你必须在类名前面加上一个斜杠(即\Exception),告诉PHP从全局空间(或根,如果你想叫它) ( PHP )使用PHP,而不是你的名称空间;

代码语言:javascript
复制
<?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

票数 35
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6374345

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档