PHP Classmaps


Exemple

Lors de la création d'un client SOAP en PHP, vous pouvez également définir une clé de classmap dans le tableau de configuration. Cette classmap définit les types définis dans le WSDL qui doivent être mappés sur les classes réelles, au lieu du StdClass par défaut. La raison pour laquelle vous souhaitez le faire est que vous pouvez obtenir une complétion automatique des champs et des appels de méthode sur ces classes, au lieu d'avoir à deviner quels champs sont définis sur le StdClass normal.

class MyAddress {
    public $country;
    public $city;
    public $full_name;
    public $postal_code; // or zip_code
    public $house_number;
}

class MyBook {
    public $name;
    public $author;

    // The classmap also allows us to add useful functions to the objects
    // that are returned from the SOAP operations.
    public function getShortDescription() {
        return "{$this->name}, written by {$this->author}";
    }
}

$soap_client = new SoapClient($link_to_wsdl, [
    // Other parameters
    "classmap" => [
        "Address" => MyAddress::class, // ::class simple returns class as string
        "Book" => MyBook::class,
    ]
]);

Après avoir configuré le classmap, chaque fois que vous effectuez une opération spécifique renvoyant un type Address ou Book , SoapClient instanciera cette classe, remplira les champs avec les données et les renverra de l'appel d'opération.

// Lets assume 'getAddress(1234)' returns an Address by ID in the database
$address = $soap_client->getAddress(1234);

// $address is now of type MyAddress due to the classmap
echo $address->country;

// Lets assume the same for 'getBook(1234)'
$book = $soap_client->getBook(124);

// We can not use other functions defined on the MyBook class
echo $book->getShortDescription();

// Any type defined in the WSDL that is not defined in the classmap
// will become a regular StdClass object
$author = $soap_client->getAuthor(1234);

// No classmap for Author type, $author is regular StdClass.
// We can still access fields, but no auto-completion and no custom functions
// to define for the objects.
echo $author->name;