SoapClient::__getTypes

(PHP 5, PHP 7, PHP 8)

SoapClient::__getTypesRetourne une liste des types SOAP

Description

public SoapClient::__getTypes(): ?array

SoapClient::__getTypes() retourne la liste des types SOAP décrits dans le fichier WSDL du service Web courant.

Note:

Cette fonction n'est disponible qu'en mode WSDL.

Liste de paramètres

Cette fonction ne contient aucun paramètre.

Valeurs de retour

Un array de types SOAP détaillant toutes les structures et les types

Exemples

Exemple #1 Exemple avec SoapClient::__getTypes()

<?php
$client
= new SoapClient("http://soap.amazon.com/schemas3/AmazonWebServices.wsdl");
var_dump($client->__getTypes());
?>

L'exemple ci-dessus va afficher :

array(88) {
  [0]=>
  string(30) "ProductLine ProductLineArray[]"
  [1]=>
  string(85) "struct ProductLine {
 string Mode;
 string RelevanceRank;
 ProductInfo ProductInfo;
}"
  [2]=>
  string(105) "struct ProductInfo {
 string TotalResults;
 string TotalPages;
 string ListName;
 DetailsArray Details;
}"
...
  [85]=>
  string(32) "ShortSummary ShortSummaryArray[]"
  [86]=>
  string(121) "struct GetTransactionDetailsRequest {
 string tag;
 string devtag;
 string key;
 OrderIdArray OrderIds;
 string locale;
}"
  [87]=>
  string(75) "struct GetTransactionDetailsResponse {
 ShortSummaryArray ShortSummaries;
}"
}

Voir aussi

add a note add a note

User Contributed Notes 2 notes

up
21
felipe dot cwb at hotmail dot com
10 years ago
<?php
// to see formated types

$soap = new SoapClient('http://domain.com/ws.php?WSDL');

echo
'<pre>';
echo
'<h2>Types:</h2>';
$types = $soap->__getTypes();
foreach (
$types as $type) {
   
$type = preg_replace(
        array(
'/(\w+) ([a-zA-Z0-9]+)/', '/\n /'),
        array(
'<font color="green">${1}</font> <font color="blue">${2}</font>', "\n\t"),
       
$type
   
);
    echo
$type;
    echo
"\n\n";
}
echo
'</pre>';
up
0
Serge Liatko
1 year ago
Here is the fixed version of my previous code (@moderators , please delete my previous note )

Returns a more comprehensive array of SOAP Client types as an array

<?PHP
/**
* @param \SoapClient $soap
*
* @return array The WSDL types data as an array.
*/
function read_wsdl_types( SoapClient $soap ): array {
   
$wsdl_types = $soap->__getTypes();
   
$lookup     = array();
   
$regexes    = array(
       
'atomic' => '/^([\w_]+)\s([\w_]+)$/mi',
       
'list'   => '/^([\w_]+)\s([\w_]+)[ {]+([\w_]+)[ }]+$/mi',
       
'struct' => '/([\w_]+)\s([\w_]+)[\s{]?([\w_]+)*[\s;}]?/mi',
    );
    foreach (
array_reverse( $wsdl_types ) as $wsdl_type ) {
       
$matches = array();
        foreach (
$regexes as $type => $regex ) {
            if (
preg_match_all( $regex, $wsdl_type, $matches ) ) {
                break;
            }
        }
        if ( !empty(
$matches[1] ) && !empty( $matches[2] ) ) {
            switch (
$type ) {
                case
'atomic':
                   
$name            = array_shift( $matches[2] );
                   
$data_type       = array_shift( $matches[1] );
                   
$lookup[ $name ] = array(
                       
'name'      => $name,
                       
'type'      => $type,
                       
'data_type' => $data_type,
                       
'items'     => array(),
                    );
                    break;
                case
'list':
                   
$name            = array_shift( $matches[2] );
                   
$type            = array_shift( $matches[1] );
                   
$items           = array_shift( $matches[3] );
                   
$lookup[ $name ] = array(
                       
'name'      => $name,
                       
'type'      => $type,
                       
'data_type' => $items,
                       
'items'     => array(
                            array(
                               
'name'      => '',
                               
'data_type' => $items,
                            ),
                        ),
                    );
                    break;
                case
'struct':
                   
$name  = array_shift( $matches[2] );
                   
$type  = array_shift( $matches[1] );
                   
$items = array();
                    foreach (
$matches[2] as $key => $item_name ) {
                       
$items[ $key ] = array(
                           
'name'      => $item_name,
                           
'data_type' => $matches[1][ $key ],
                        );
                    }
                   
$lookup[ $name ] = array(
                       
'name'      => $name,
                       
'type'      => $type,
                       
'data_type' => $name,
                       
'items'     => $items,
                    );
                    break;
            }
        }

    }

   
array_walk( $lookup, function ( &$type, $key, $data ) {
        if ( !empty(
$type['items'] ) ) {
           
array_walk( $type['items'], function ( &$item, $key, $data ) {
                if ( !empty(
$item['data_type'] ) ) {
                   
$old_data_type     = $item['data_type'];
                   
$item['type']      = $data[ $old_data_type ]['type'] ?? 'atomic';
                   
$item['data_type'] = $data[ $old_data_type ]['data_type'] ?? $old_data_type;
                   
$item['from']      = $data[ $old_data_type ]['name'] ?? '';
                }
            },
$data );
        }
    },
$lookup );

    return
array_reverse( $lookup );
}
?>
To Top