Sommaire
Créer des variables
Présentation
Longs (Entiers)
Doubles (nombres à virgule flottante)
Chaînes de caractères
Booléens
Tableaux
Objets
Ressources
Les macros de création automatiques de variables globales
Creating Constants
|
7.11.4 Chaînes de caractères
Les chaînes de caractères demandent un peu plus d'effort. Comme nous l'avons
mentionné plus tôt, toutes les chaînes de caractères qui seront associées
avec les structures internes de données de Zend, doivent être allouées avec
le système de gestion de la mémoire de Zend. Le référencement de
chaînes statiques ou de chaînes allouées avec les routines standards
ne sera pas autorisé. Pour assigner des chaînes de caractères, vous devez
accéder à la structure str dans l'enveloppe zval.value
Le type correspondant est IS_STRING:
zval *new_string;
char *string_contents = "Ceci est une nouvelle variable de type chaînes de caractères";
MAKE_STD_ZVAL(new_string);
new_string->type = IS_STRING;
new_string->value.str.len = strlen(string_contents);
new_string->value.str.val = estrdup(string_contents);
Notez l'utilisation de la fonctoin Zend estrdup ici.
Bien sur, vous pouvez aussi utiliser la macro prédéfinie
ZVAL_STRING:
zval *new_string;
char *string_contents = "This is a new string variable";
MAKE_STD_ZVAL(new_string);
ZVAL_STRING(new_string, string_contents, 1);
ZVAL_STRING accepte un troisième paramètre,
qui indique si la chaîne fournie doit être dupliquée (en utilisant
la fonction estrdup). En donnant la valeur de
1 à ce paramètre, la chaîne sera dupliquée.
La valeur de 0 fera que la fonction utilisera
le pointeur sur le contenu. C'est la méthode la plus pratique
si vous voulez créer une nouvelle variable qui fait référence
à une chaîne qui existe déjà, et qui est allouée dans la mémoire
interne de Zend.
Si vous voulez tronquer la chaîne à partir d'une certaine position,
ou si vous connaissez déjà sa taille, vous pouvez utiliser
la macro ZVAL_STRINGL(zval, string, length, duplicate),
qui accepte une longeur pour la chaîne qui sera créée. Cette macro
est plus rapide que ZVAL_STRING et elle
respecte les chaînes binaires.
Pour créer une chaîne vide, passez la longueur de 0
à cette macro, et utilisez empty_string comme contenu :
new_string->type = IS_STRING;
new_string->value.str.len = 0;
new_string->value.str.val = empty_string;
Bien sur, il y a aussi une macro pour faire cela
(ZVAL_EMPTY_STRING) :
MAKE_STD_ZVAL(new_string);
ZVAL_EMPTY_STRING(new_string);
|