Faire le quiz close

Les chaînes de caractères en PHP 8

#1 Présentation des chaînes de caractères en PHP open

Une chaîne de caractères en PHP est un tableau d'octets. Dans ces octets, on va dire qu'il y a des caractères ASCII. C'est important, car ça veut dire que PHP ne supporte pas en standard les caractères Unicode.

Pour utiliser des caractères Unicode, il faut activer l'extension mbstring. C'est ce que j'ai fait dans le tutoriel sur l'installation de PHP pour Symfony 6. Ensuite, il faut utiliser, les fonctionnalités disponibles dans cette extension.

#2 Création de chaînes caractères open

Pour créer une chaîne de caractères, vous avez besoin d'un caractère qui sert à délimiter la chaîne (un de chaque côté de la chaîne). En PHP, vous pouvez délimiter la chaîne, soit avec des doubles quote, ( " / guillemet / touche du 3), soit avec des simples quote, ( ' / apostrophe / touche du 4).

Si vous avez besoin d'insérer dans la chaîne, le caractère qui sert déjà de délimiteur, alors il faudra le faire précéder d'un backslash \, pour lui dire : "toi, à cet endroit-là, tu n'es pas un délimiteur" 😉. Dans ce cas, on dit que l'on échappe le caractère (On échappe à sa signification. Voyez ça comme ça. 😏).

Puisqu'il y a deux possibilités, vous pouvez vous poser la question : Quand utiliser les simples ou les doubles quote ? Personnellement quand j'ai besoin d'utiliser les possibilités offertes par les doubles quote, eh bien j'utilise les doubles quote, sinon j'utilise les simples quote.

Résultat de l'exécution en PHP 8.2.1
Déclaration de variable

#3 Création de chaînes caractères sur plusieurs lignes open

En PHP, on peut créer des chaînes de caractères multilignes. Tant mieux, parce que c'est un besoin que l'on rencontre souvent. C'est le cas, lorsque l'on veut écrire une requête SQL, et des requêtes SQL, on en fait beaucoup.

Dans ce cas, notre besoin, c'est non seulement d'aller à la ligne, mais en plus, de pouvoir indenter de manière à améliorer la lisibilité de la requête.

Au niveau de la construction de la chaîne de caractères, un caractère \n (line feed, traduction saut de ligne, aussi appelé new line, traduction nouvelle ligne) est inséré automatiquement, à chaque fois, que vous allez à la ligne. Si vous tapez des tabulations, pour faire apparaître une indentation, eh bien, ces caractères sont, eux aussi, insérés dans la chaîne.

Si j'affiche la chaîne multiligne dans le navigateur et bien, je vois qu'en HTML ce n'est justement pas une chaîne multiligne 🙃. Le HTML n'affiche pas les caractères \n et les tabulations sont rendues comme un seul espace. Que j'affiche la chaîne avec un echo ou avec un var_dump() ça ne change rien.

Résultat de l'exécution en PHP 8.2.1
Affichage d'une chaine multiligne en HTML

Par contre, si je regarde le code source de ma page en faisant un CTRL+u, je retrouve ma chaîne multiligne avec tous ses caractères.

Affichage d'une chaine multiligne dans le code HTML

#4 Substitution de variables et insertion de caractères spéciaux open

Dans le tutoriel sur les constantes et les variables, j'ai déjà expliqué ce qu'était la substitution de variable, dans les chaînes de caractères construites avec des doubles quote. Dans ce tutoriel, je vais détailler.

Je déclare une variable $prix qui vaut un entier 1. Je déclare ensuite une autre variable $message, qui est une chaîne de caractères entre doubles quote, dans laquelle est insérée $prix (ligne 15). Ensuite, je fais un echo de $message et je me rends compte que la variable a été remplacée par sa valeur. C'est ce que l'on appelle la substitution de variables.

Il peut se présenter un cas particulier où le nom de la variable se trouve accolé à d'autres caractères qui constituent la chaîne. C'est le cas dans l'exemple ci-dessous du caractère qui est collé au nom de la variable $prix (ligne 21). Dans ce cas, je dois délimiter le nom de la variable en plaçant une paire d'accolades. La syntaxe actuelle est d'inclure le $ dans la paire d'accolades. L'ancienne syntaxe, qui consistait à mettre que le nom de la variable entre accolades, sans le $, est dépréciée (ligne 23).

Il y a un autre cas où il est nécessaire de mettre la paire d'accolades, même s'il n'y a pas de caractères accolés, c'est si vous avez une variable qui est un élément d'un tableau. On va utiliser les variables superglobales car pour l'instant ce sont les seuls tableaux que l'on connaît. Par exemple ci-dessous, je fais un echo de $_SERVER['DOCUMENT_ROOT']. Je reviens sur ce point dans le tuto sur les tableaux en PHP.

Résultat de l'exécution en PHP 8.2.1
Faire des echo avec des variables

En utilisant des séquences d'échappement, on a vu que l'on pouvait insérer des caractères spéciaux comme le \n. En fait, on peut faire beaucoup plus que ça :

  1. On peut insérer n'importe quel caractère ASCII. Avec la séquence d'échappement \###, on insère un caractère ASCII codé en octal.
  2. Avec la séquence d'échappement \x##, on insère un caractère ASCII codé en hexadécimal.
  3. Avec la séquence d'échappement \u{######}, on insère un caractère Unicode. Attention, ce n'est pas contradictoire avec ce que je vous ai dit au début. C'est la séquence d'échappement qui permet de dire à PHP : "ce caractère est un caractère Unicode, tu vas l'interpréter sur plusieurs octets". Ca ne fait pas pour autant une chaîne Unicode.

Je fais un exemple ci-dessous, dans lequel j'insère la séquence \u{0024} pour le caractère dollar et derrière j'insère \u{1F60E} (ligne 10) pour une émoticône sunglass.

Ensuite, j'utilise la fonction strlen() pour afficher la taille en octets de deux caractères. Le premier (ligne 14) est le caractère unicode. Le second (ligne 17) est un caractère ASCII quelconque.

Résultat de l'exécution en PHP 8.2.1
Insertion de caractères Unicode en PHP

#5 La chaîne de caractères vue comme un tableau open

Une chaîne de caractère peut être considérée comme un tableau de caractères. Il est donc possible d'accéder à un caractère comme à un élément d'un tableau (indexé par un entier).

Résultat de l'exécution en PHP 8.2.1
Une chaîne vue comme un tableau

#6 Cast de chaîne open

Une chaîne de caractère peut être convertie en un entier ou un flottant si elle contient un entier ou un flottant sous forme de chaîne bien sûr. Les caractères, espaces, tabulations, voir \n ne gênent pas la conversion.

Résultat de l'exécution en PHP 8.2.1
Conversion de type