Les chaînes de caractères sont des séquences de caractères. En PHP, un caractère est un octet et il y en 256 de possibles. PHP n'a pas (encore?) de support natif d'Unicode. Voir les fonctions utf8_encode() et utf8_decode() pour un support Unicode.
Note : La taille n'est pas un problème majeur pour une chaîne. Elle peut devenir très grande sans problème. Il n'y a pas à s'en faire pour cela.
Une chaîne peut être spécifiée de trois manières différentes :
Le moyen le plus simple de spécifier une chaîne de caractères est d'utiliser les guillemets simples : '.
Pour spécifier un guillemet simple littéral, vous devez l'échapper avec un anti-slash (\), comme dans de nombreux langages. Si un anti-slash doit apparaître dans votre chaîne ou bien en fin de chaîne, il faudra le doubler. Notez que si vous essayez d'échapper n'importe quel autre caractère, l'anti-slash sera conservé! Il n'y a pas besoin d'échapper d'autres caractères que le guillemet lui-même.
Note : En PHP 3, une alerte sera affichée si cela arrive avec un niveau de rapport d'erreur de E_NOTICE.
Note : Contrairement aux autres syntaxes, les variables présentes dans la chaîne ne seront PAS remplacées par leurs valeurs.
Si la chaîne est entourée de guillemets doubles ("), PHP va comprendre certaines séquences de caractères :
Tableau 11-1. Les caractères spéciaux
Séquence | Valeur |
---|---|
\n | Nouvelle ligne (linefeed, LF ou 0x0A (10) en ASCII) |
\r | Retour à la ligne (carriage return, CR ou 0x0D (13) en ASCII) |
\t | Tabulation horizontale (HT ou 0x09 (9) en ASCII) |
\\ | Anti-slash |
\$ | Caractère $ |
\" | Guillemets doubles |
\[0-7]{1,3} | Une séquence de caractères qui permet de rechercher un nombre en notation octale. |
\x[0-9A-Fa-f]{1,2} | Une séquence de caractères qui permet de rechercher un nombre en notation hexadécimale. |
Si vous essayez d'utiliser l'anti-slash sur n'importe quelle autre séquence, l'anti-slash sera affiché dans votre chaîne.
Le plus important pour les chaînes à guillemets doubles est le fait que les variables qui s'y trouvent seront remplacées par leur valeur. Voir la section sur le traitement des variables dans les chaînes pour plus de détails.
Un autre moyen de délimiter les chaînes est d'utiliser la syntaxe dite "Heredoc" (en français, documentation ici): <<<, suivi d'un identifiant arbitraire, puis de la chaîne, puis l'identifiant initial pour terminer la séquence.
L'identifiant utilisé doit suivre les mêmes règles que les étiquettes PHP : il ne doit contenir uniquement que des caractères alpha-numériques, et des soulignés ("_"), et enfin, commencer par un caractère alphabétique ou un souligné.
Avertissement |
Il est très important de noter que la ligne qui contient l'identifiant de fermeture ne doit contenir aucun autre caractère, hormis, éventuellement, un point-virgule (;). Cela signifie notamment que l'identifiant ne doit pas être indenté et qu'il n'y a aucun caractère blanc entre le retour à la ligne et l'identifiant, ou bien entre l'identifiant et le ;. Le plus dur est peut être qu'il ne faut pas qu'il y ait un retour à la ligne ((\r) à la fin de cette ligne, mais seulement un retour chariot (\n). Puisque Microsoft Windows utilise la séquence \r\n comme terminaison de ligne, la syntaxe heredoc risque de ne pas fonctionner dans ce cas là. Cependant, la plupart des éditeurs PHP fournissent une sauvegarde au format UNIX. |
La syntaxe Heredoc se comporte exactement comme une chaîne à guillemets doubles, sans les guillemets doubles. Cela signifie que vous n'avez pas à échapper les guillemets (simples ou doubles) dans cette syntaxe. Les variables sont remplacées par leur valeur et le même soin doit leur être apporté que dans les chaînes à guillemets doubles.
Exemple 11-13. Exemple de chaîne HereDoc
|
Note : Le support Here doc a été ajouté en PHP 4.
Lorsqu'une chaîne est spécifiée avec des guillemets doubles ou en utilisant la syntaxe heredoc, les variables qu'elle contient sont remplacées par leur valeur.
Il y a deux types de syntaxe, une simple et une complexe. La syntaxe simple est la plus courante et la plus pratique : elle fournit un moyen d'utiliser les variables, que ce soient des chaînes, des tableaux ou des membres d'objets.
La syntaxe complexe a été introduite en PHP 4 et peut être reconnue grâce aux accolades entourant les expressions.
Dès qu'un signe dollar $ est rencontré, l'analyseur PHP va lire autant de caractères qu'il peut pour former un nom de variable valide. Entourez le nom de la variable avec des accolades pour indiquer explicitement son nom.
Exemple 11-14. Utilisation des accolades {} dans les chaînes
|
De la même façon, vous pouvez utiliser un élément de tableau ou un membre d'objet. Pour les éléments de tableau, le crochet fermant ']' marquera la fin du nom de la variable. Pour les membres d'objets, les mêmes règles que ci-dessus s'appliquent. Cependant, il n'existe pas d'astuce comme cela pour les variables simples.
Exemple 11-15. Utilisation des accolades {} dans les chaînes pour les tableaux
|
Pour tout ce qui sera plus compliqué, voyez la syntaxe complexe.
La syntaxe est dite "complexe" car elle permet l'utilisation d' expressions complexes et non pas parcequ'elle serait obscure.
En fait, vous pouvez inclure n'importe quelle valeur qui est dans l'espace de nom avec cette syntaxe. Il suffit d'écrire une expression exactement comme si elle était hors de la chaîne, puis de l'entourer d'accolades {}. Puisque vous ne pouvez pas échapper les accolades, cette syntaxe ne commence qu'à partir du signe dollar, qui suit immédiatement l'accolade ouvrante. Vous pouvez utiliser "{\$" ou "\{$" pour obtenir un "{$" littéral. Voici quelques exemples :
Exemple 11-16. Syntaxe complexe de chaîne
|
Les caractères d'une chaîne sont accessibles et modifiables en spécifiant leur offset (le premier caractère est d'offset 0) entre accolade, après le nom de la variable.
Note : Pour assurer la compatibilité ascendante, vous pouvez toujours accéder aux caractères avec des crochets. Mais cette syntaxe est obsolète en PHP 4.
Exemple 11-17. Exemples de chaînes
|
Les chaînes peuvent être concaténées avec l'opérateur '.' (point). Notez que l'opérateur d'addition '+' (plus) ne fonctionnera pas. Reportez-vous à la section opérateurs de chaînes pour plus de détails.
Il y a une grande quantité de fonctions pratiques pour modifier les chaînes.
Reportez-vous à la section chaînes de caractères pour les fonctions les plus générales, à Expressions rationnelles Perl et Expressions rationnelles POSIX étendues pour les recherches et remplacements.
Il y a aussi les fonctions sur les URL, ainsi que des fonctions de chiffrage (mcrypt et mhash).
Finalement, si vous ne trouvez toujours pas votre bonheur, il y a les fonctions de types de caractères.
Vous pouvez convertir une valeur en une chaîne de caractères en utilisant l'opérateur (string) ou bien la fonction strval(). La conversion en chaîne de caractères est automatiquement faite dans toutes les situations qui nécessitent une chaîne de caractères. Cela arrive lorsque vous utilisez des fonctions comme echo() ou print() ou encore lorsque vous comparez une valeur avec une chaîne de caractères. Lisez les sections du manuel sur les types et la définition du type pour comprendre plus facilement ce qui va suivre. Voir aussi la fonction settype().
Le booléen TRUE est converti en la chaîne de caractères "1", et le booléen FALSE est représenté par la chaîne de caractères vide "". De cette façon, vous pouvez convertir des booléens en chaîne de caractères et vice-versa.
Un entier ou un nombre à virgule flottante est converti en une chaîne de caractères qui représente ce nombre en décimal (y compris l'exposant des nombres décimaux).
Les tableaux sont toujours convertis en la chaîne de caractères "Array", ce qui fait que vous ne pouvez pas afficher le contenu d'un tableau avec la fonction echo() ou print(). Pour voir un seul élément, vous devriez faire quelque chose comme : echo $arr['foo']. Voyez les informations ci-dessous pour plus de conseils.
Les objets sont automatiquement convertis en la chaîne de caractères "Object". Si vous souhaitez afficher le membre d'un objet, lisez le paragraphe ci-dessous. Si vous voulez connaître le nom de la classe de cet objet, utilisez la fonction get_class(). Depuis PHP 5, la méthode __toString() est utilisée si elle existe.
Les ressources sont toujours converties en chaîne de caractères "Resource id #1" où 1 est le nombre unique représentant la ressource, assigné par PHP au moment de l'exécution. Si vous souhaîtez connaître le type d'une ressource, utilisez get_resource_type().
NULL est toujours converti en une chaîne de caractères vide.
Comme vous pouvez le voir, afficher des tableaux, des objets ou des ressources n'est pas pertinent par cette méthode. Reportez-vous aux fonctions print_r() et var_dump() pour avoir des outils plus pratiques.
Vous pouvez aussi convertir des valeurs PHP en chaînes pour les sauver dans un stockage. Cette méthode est appelée la linéarisation et peut être exploitée avec la fonction serialize(). Vous pouvez aussi linéariser des valeurs PHP en structure XML si vous avez le support WDDX dans votre configuration de PHP.
Lorsqu'une chaîne de caractères est évaluée comme une valeur numérique, le résultat et le type de la variable sont déterminés comme suit.
La chaîne de caractères est de type "double" si elle contient un des caractères '.', 'e' ou 'E'. Sinon, elle est de type entier ("integer").
La valeur est définie par la première partie de la chaîne. Si la chaîne de caractères débute par une valeur numérique cette valeur sera celle utilisée. Sinon, la valeur sera égale à 0 (zéro). Les données numériques valides ont un signe optionel, suivies par un ou plusieurs digits (optionnellement, contenant un point de décimal), sivies par un exponentiel optionnel. L'exponentiel peut être un 'e' ou un 'E' suivi par un ou plusieurs digits.
Exemple 11-18. Exemples de conversions automatiques
|
Pour plus d'informations sur les conversions de type, voir les pages de man Unix à propos de la fonction strtod(3).
Si vous voulez tester l'un des exemples de cette section, vous pouvez faire un copier/coller et l'insérer dans un script pour voir comment il se comporte :
Ne vous attendez pas à récupérer le code d'un caractère en le convertissant en un entier (comme vous pourriez le faire en C par exemple). Utilisez les fonctions ord() et chr() pour convertir les caractères en leurs codes.
Précédent | Sommaire | Suivant |
Les nombres décimal | Niveau supérieur | Les tableaux |