SommaireTelecharger la documentationChapitre suivantChapitre precedent  

  .: News :.: Edito :.: Scripts :.: Forum :.: Erreurs :.: Jobs :. 
 
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);


Chapitre précédentChapitre suivantAccueil nexen.net