Types XML-RPC¶
Types supportés¶
XRL supporte l’ensemble des types définis dans la spécification officielle de XML-RPC, c’est-à-dire :
int
eti4
: entier signé sur 32 bitsboolean
: le type booléen habituelstring
: une simple chaîne de caractèresdouble
: nombre flottant signé à double précisiondateTime.iso8601
: date/heure (sans milli-secondes ni fuseau horaire)base64
: données binaires encodées en base64struct
: tableau associatifarray
: tableau indexé
XRL accepte également les types suivants, dont l’usage est plutôt répandu, bien qu’ils ne fassent pas partie de la spécification officielle :
nil
: valeur null (absence de valeur)i8
: entier signé sur 64 bits
Pour finir, les types suivants appartenant à l’espace de noms défini par la Fondation Apache sont aussi supportés. Veuillez noter que dans ce cas particulier, les types doivent appartenir à l’espace de nom ayant pour URI http://ws.apache.org/xmlrpc/namespaces/extensions pour être correctement interprétés.
nil
: valeur null (absence de valeur); identique au type sans espace de nomsi1
: entier signé sur 8 bitsi2
: entier signé sur 16 bitsi8
: entier signé sur 64 bits; identique au type sans espace de nomsbiginteger
: entier de taille arbitrairedom
: élément du DOM, transmis sous forme de fragment XMLdateTime
: date/heure avec milli-secondes et fuseau horaire
Lorsque des types non-standards doivent être envoyés, XRL utilise systématiquement les types appartenant à des espaces de noms. Lisez le chapitre qui suit pour plus d’information.
Conversion des types¶
Par défaut, XRL convertit automatiquement les valeurs entre les types de PHP et ceux de XML-RPC lorsque c’est nécessaire.
Le tableau qui suit montre comment XRL convertit les types PHP vers les types XML-RPC.
Type PHP | Type XML-RPC |
---|---|
null |
nil dans un espace de noms |
boolean |
boolean |
integer |
i4 si le nombre tient sur 32 bits, i8 dans un espace de noms [1] sinon |
double |
double |
string |
string s’il s’agit d’une séquence UTF-8 valide, base64 sinon |
array |
array pour les tableaux indexés, struct pour les tableaux associatifs |
ressource GMP integer (PHP < 5.6.0) |
i4 si le nombre tient sur 32 bits, i8 dans un espace de noms [1] s’il tient sur 64 bits, biginteger dans un espace de noms [1] sinon |
objet \GMP (PHP >= 5.6.0) |
i4 si le nombre tient sur 32 bits, i8 dans un espace de noms [1] s’il tient sur 64 bits, biginteger dans un espace de noms [1] sinon |
objet \fpoirotte\XRL\Types\AbstractType |
Type XML-RPC représenté par l’objet |
objet \DateTime |
The XML-RPC ``dateTime.iso8601`` data type does not support
milliseconds, nor passing timezone information.
Only use this type when the actual timezone is known beforehand
(using contextual information or a pre-established convention),
or when potential errors in date/time handling are not an issue.
|
objet \DOMNode |
dom dans un espace de noms [1] |
objet \XMLWriter |
dom dans un espace de noms [1] |
objet \SimpleXMLElement |
dom dans un espace de noms [1] |
objet \Exception |
faute XML-RPC (dérivée de struct ) |
Le tableau qui suit montre comment XRL convertit les types XML-RPC vers les types PHP.
Type XML-RPC | Type PHP |
---|---|
boolean |
boolean |
i4 |
integer |
int |
integer |
double |
double |
string |
string |
base64 |
string |
array |
tableau indexé |
struct |
objet \Exception si la structure représente une faute [2], tableau associatif sinon |
dateTime.iso8601 |
\DateTime (en utilisant le fuseau horaire local par défaut) |
nil |
null |
nil dans un espace de noms [1] |
null |
i1 dans un espace de noms [1] |
integer |
i2 dans un espace de noms [1] |
integer |
i8 |
An exception will be thrown in this case if PHP's native
``integer`` type cannot be used and the GMP extension
is not available.
|
i8 dans un espace de noms [1] |
An exception will be thrown in this case if PHP's native
``integer`` type cannot be used and the GMP extension
is not available.
otherwise (the GMP extension is required in this case) |
biginteger dans un espace de noms [1] |
An exception will be thrown in this case if the GMP extension
is not available.
|
dom dans un espace de noms [1] |
objet \SimpleXMLElement |
datetime dans un espace de noms [1] |
\DateTime object (using local timezone information by default,
but can be configured to use another timezone as well) |
[1] | (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15) Avec l’espace de noms portant l’URI http://ws.apache.org/xmlrpc/namespaces/extensions pour la compatibilité avec les autres implémentations. |
[2] | Un struct XML-RPC représentant une faute (c’est-à-dire une erreur) est converti en une exception qui est automatiquement levée. |
Sous le capot¶
Les conversions de types sont gérées par les classes \fpoirotte\XRL\NativeEncoder
(pour les conversions depuis PHP vers XML-RPC) et \fpoirotte\XRL\NativeDecoder
(pour les conversions depuis XML-RPC vers PHP), en s’appuyant sur les classes de l’espace de noms \fpoirotte\XRL\Types\
.
Vous pouvez surcharger ou désactiver les conversions en passant un autre encodeur/décodeur au constructeur du client ou du serveur XML-RPC.
Note
Si vous changez l’encodeur/décodeur par défaut, vous devrez gérer vous-même les conversions depuis/vers les instances de \fpoirotte\XRL\Types\AbstractType
utilisées en interne par XRL.
Avertissement
Les fautes XML-RPC sont traitées à part et sont toujours transformées en objets \fpoirotte\XRL\Exception
avant d’être automatiquement levées. Ce comportement est indépendant du décodeur passé au constructeur du client/serveur.