PHP 类图

示例

在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;