在PHP中创建SOAP客户端时,还可以classmap在配置数组中设置密钥。这classmap定义了WSDL中定义的类型应映射到实际类,而不是default StdClass。之所以这样做,是因为您可以在这些类上获得字段的自动完成和方法调用,而不必猜测常规字段上设置了哪些字段StdClass。
class MyAddress { public $country; public $city; public $full_name; public $postal_code; // 或邮递区号 public $house_number; } class MyBook { public $name; public $author; // 类图还允许我们向对象添加有用的功能 // 从SOAP操作返回的内容。 public function getShortDescription() { return "{$this->name}, written by {$this->author}"; } } $soap_client = new SoapClient($link_to_wsdl, [ // 其他参数 "classmap" => [ "Address" => MyAddress::class, // :: class简单以字符串形式返回类 "Book" => MyBook::class, ] ]);
配置类映射后,无论何时执行返回类型Address或的特定操作,BookSoapClient都将实例化该类,用数据填充字段并从操作调用中返回它。
// 假设“ getAddress(1234)”通过数据库中的ID返回一个地址 $address = $soap_client->getAddress(1234); // 由于类映射的原因,$address现在为MyAddress类型 echo $address->country; // 假设'getBook(1234)'相同 $book = $soap_client->getBook(124); // 我们不能使用MyBook类上定义的其他函数 echo $book->getShortDescription(); // WSDL中定义的,未在类映射中定义的任何类型 // 将成为常规的StdClass对象 $author = $soap_client->getAuthor(1234); // 没有针对Author类型的类映射,$author是常规的StdClass。 // 我们仍然可以访问字段,但是没有自动完成功能,也没有自定义功能 // 为对象定义。 echo $author->name;