我已经使用easyWsdl2PHP生成了一组 php 类并且它们工作正常,但是当我将生成的类放在这样的命名空间中时......
namespace myCompany\ourService
Run Code Online (Sandbox Code Playgroud)
然后最初在调用此代码时...
$params = array("classmap"=>self::$classmap,"trace" => true,"exceptions" => true);
$this->soapClient = new SoapClient($url,$params);
Run Code Online (Sandbox Code Playgroud)
我收到这个错误
未找到“myCompany\ourService\SoapClient”类
我通过调用来修复它new \SoapClient($url...(注意开头的反斜杠,转义命名空间),但现在基本上它在抱怨它找不到“响应”对象,即我的请求被放置在一个“销售”对象中并传递给肥皂调用,错误是这样的
未捕获的 SoapFault 异常:找不到 [Client] 类“SALEResponse”
如何在我的代码中正确使用 php 命名空间,如何在 php 中获取 Soap 以正确使用命名空间?我有两个非常相似的服务需要连接,都使用“sale”方法,以及许多其他不兼容的常用命名元素,因此将它们放在 php 命名空间中似乎是一个很好的解决方案,因为代码是生成的,我可以将每个重命名Sale为Service1_Saleand Service2_Sale,但这远非理想。有什么帮助吗?
我找到了一个解决方案:
private static $classmap = array('SALE'=>'ourCompany\ourService\SALE'
,'SALEREQUEST_V1'=>'ourCompany\ourService\SALEREQUEST_V1'
,'AUTHORIZATION_V1'=>'ourCompany\ourService\AUTHORIZATION_V1'
,'RECEIPTREQUEST_V1'=>'ourCompany\ourService\RECEIPTREQUEST_V1'
,'SALEResponse'=>'ourCompany\ourService\SALEResponse'
);
Run Code Online (Sandbox Code Playgroud)
我在其中添加了ourCompany\ourService\以包含我正在使用的命名空间。