不太明白Soap的使用方式

我现在是想使用Soap,但是在程序里这样用:

$client = new SoapClient('http://xxxx');

为什么会出现这样的错误?

include(SoapClient.php) [<a href='function.include'>function.include</a>]: failed to open stream: No such file or directory

这是说明我的PHP没有安装Soap吗?十分感谢

是的。你可以用requirement checker看看.

你创建SoapClient时需要设置class map选项。

Quote

你创建SoapClient时需要设置class map选项。

返回空的问题解决了,原来是数组参数的问题,传入array的key应该是arg0这样。现在真正到了做classmap的时候,我还要好好研究下。

但是我现在的确不明白是如何做到classmap的。比如做了classmap之后,我是调用这个之后

$result=$client->getUserByUsername(…);

这个$result就是我映射之后的类的对象吗?还是需要做其他的操作?

最后,还想问一下Yii中的Class Mapping只是针对服务端的吗?十分感谢!

是的,用了classmap后,$result就是你需要的对象了。classmap主要给客户端用的(比如PHP SoapClient, Flex)。

Quote

是的,用了classmap后,$result就是你需要的对象了。classmap主要给客户端用的(比如PHP SoapClient, Flex)。

十分感谢!不好意思,还想再问一个做classmap时的问题,可能是我PHP弄得不是很明白,所以感觉很棘手。

现在我对映射回来的$result进行print_r()操作时是这样的结果:

getUserByUsernameResponse Object ( [return] => stdClass Object ( [birthday] => 1986-06-05 [email] => quxianping@…

外层的stdClass已经映射为getUserByUsernameResponse类型了,可是内层的stdClass却没有映射(想把它映射为useDTO类型)。类是下面这样的:

class userDTO {

  public $birthday; // string

  public $companyCode; // string

  public $companyId; // long

  public $companyName; // string

  public $departmentCode; // string

  public $departmentId; // long

}

class getUserByUsernameResponse {

  public $return; // anyType

}

这两个类的映射我都做了, 形如:

private static $classmap = array(

                'getUserByUsernameResponse' => 'getUserByUsernameResponse',

                'userDTO' => 'userDTO);

那么我应该如何更改?才能使内层的stdClass转变为userDTO类型呢?(我觉得是服务端写的格式不够规整,应该直接返回userDTO类型,它却返回了一个getUserByUsernameResponse类型。但是现在无法改变服务端的服务,只能够接收使用唉。)

这个你可能得在网上查询答案了,我在这方面经验也不是很多。

Quote

这个你可能得在网上查询答案了,我在这方面经验也不是很多。

昨天也没找到什么解决的方法,只有先搁置了,很感谢qiang!