Cpm Affiliation : la régie publicitaire au Cpm

Les chaînes de caractères, un casse-tête

Lors d'un chapitre précédent, on a vite abordé ce qu'étaient les chaînes de caractères : apostrophes, guillemets, échappement, etc.
Mais il y a encore bien des choses à dire sur ce type bien particulier.
Zoup, jetez-vous sur ce chapitre ô combien intéressant.

Bref rappel et nouvelle structure

Avant de vous rappeler ce qu'on a déjà vu sur les chaînes de caractères, je vais vous montrer un gentil compagnon : echo. Un exemple :

Code PHP :

<?php

echo 'lala';
$e = 4;
echo $e;
echo 4 < 5;

Testez ce code et vous verrez s'afficher « lala41 » à l'écran. Vous devriez déjà avoir compris ce que fait echo, mais au cas où : echo est une structure du langage qui affiche la valeur de l'expression qui se situe à sa droite. C'est un peu comme var_dump(), à la différence près qu'on ne s'occupe pas du type de la variable, echo n'affiche que la valeur de l'expression.

ATTENTION : Il y a une seconde différence entre echo et var_dump() : le premier élément est une structure de langage alors que le second est une fonction. Ce n'est qu'une nuance, mais ça a son importance.
Vous pouvez utiliser des parenthèses pour délimiter l'expression qu'echo va afficher, c'est d'ailleurs à cause de cela que beaucoup pensent que c'est une fonction, alors que techniquement, c'est une structure de langage.

Puisque cela est fait, passons au rappel. On a vu qu'une chaîne de caractères était délimitée par des apostrophes (') ou des guillemets (") ; ainsi, ce code crée deux chaînes de caractères :

Code PHP :

<?php

'lala';
'une belle chaine ..';

N'oubliez pas que comme je n'affecte pas ces chaînes de caractères à des variables, elles n'existent que quand l'interpréteur PHP les lit.
On se souviendra également de l'échappement, cette méthode qui permet de mettre des apostrophes ou des guillemets dans les chaînes de caractères. En effet, si l'on veut mettre une apostrophe et qu'on utilise des apostrophes pour délimiter la chaîne de caractères, l'interpréteur PHP ne va pas comprendre ce qu'on veut et nous enverra une erreur. Exemple :

Code PHP :

<?php
$lala = 'J'aime le rose';
echo $lala;
?>

En faisant précéder l'apostrophe d'un backslash (\), le problème disparaît :

Code PHP :

<?php
echo $lala = 'J\'aime le rose';
?>

Si l'on veut afficher un backslash suivi d'une apostrophe, il faudra échapper le backslash en le faisant précéder par un autre, et on fera de même pour l'apostrophe :

Code PHP :

<?php
echo 'Oh oui du compliqué \\\' que c\'est cool';
?>

Enfin, ce système d'échappement est strictement identique si l'on utilise des guillemets pour délimiter les chaînes de caractères, sauf que cette fois ce sont les guillemets et non les apostrophes que l'on devra échapper.

Différence entre guillemets et apostrophes

Après ce bref rappel, on va pouvoir cerner la globalité de la problématique des deux syntaxes pour créer des chaînes de caractères.

Mieux qu'un long discours, un exemple :

Code PHP :

<?php

$pseudo = '`Haku';

echo 'Bonjour $pseudo';
echo "Bonjour $pseudo";

Devant vos yeux ébahis, alors qu'à première vue les deux instructions echo devraient afficher la même chose, une différence apparaît.
La première instruction affiche « Bonjour $pseudo » alors que la seconde affiche « Bonjour `Haku ». Voilà la première différence entre les apostrophes et les guillemets : dans une chaîne de caractères délimitée par des guillemets, les variables sont remplacées par leur valeur. C'est plutôt pratique, ça permet de simplifier les codes. Exemple :

Code PHP :

<?php

$pseudo = 'lala';
echo 'Bienvenue ';
echo $pseudo;
echo ', comment allez vous ?';

Avec des guillemets, on peut faire ainsi :

Code PHP :

<?php

$pseudo = 'lala';
echo "Bienvenue $pseudo, comment allez-vous ?";

Le rendu est le même, mais le second code est plus court et un peu plus élégant.
Toutefois, certains problèmes peuvent se poser :

Code PHP :

<?php

echo "hohé $noel, comment vas-tu ?";

Ce n'est vraiment pas de chance, mais on a une belle erreur qui s'affiche. En effet, quand l'interpréteur PHP lit la chaîne de caractères, il voit un $. Si le caractère qui suit le $ est un underscore (_) ou un caractère alphabétique (minuscule ou majuscule, peu importe), il remplacera ce nom par la variable correspondante. Comme la variable $noel n'existe pas, l'interpréteur PHP nous le signale en nous renvoyant une erreur. Souvenez-vous de la convention de nommage des variables pour savoir ce qui sera considéré comme un nom de variable par l'interpréteur PHP (ou allez relire le chapitre sur les variables).
Quelques exemples pour bien comprendre :

Code PHP :

<?php

$lala = 4;
echo "Tu as $lala enfants"; // OK, la variable existe
echo "Tu as $lili filles"; // pas bon, la variable n'existe pas
echo "Tu as $9"; // OK, on se souvient que le nom d'une variable commence par un underscore ou un caractère alphabétique

Si malgré tout, vous avez besoin d'afficher le symbole $ devant un underscore ou un caractère alphabétique, il suffit de l'échapper en le faisant précéder d'un backslash :

Code PHP :

<?php

echo "lala \$soleil";

On peut mieux saisir la différence entre les deux types de chaînes, maintenant : l'une est passive, et l'autre active. Les chaînes délimitées par des apostrophes ne subiront aucun changement, elles resteront telles qu'on les a écrites et peu importe ce que la chaîne contient. Par contre, en fonction des caractères présents dans les chaînes délimitées par des guillemets, il peut se produire des choses comme un remplacement d'un bout de la chaîne par la valeur d'une variable.

Il existe plusieurs symboles qui ont une signification pour les chaînes délimitées par des guillemets, les voici :

SymboleSignification
\n Fin de la ligne
\t Tabulation
\r Retour à la ligne

Il y en a encore deux autres, mais je ne les présenterai pas car ils ne sont pas très intéressants pour le moment ; vous pouvez cependant trouver la liste exhaustive ici.
Pour échapper ces symboles, il suffit encore une fois de les précéder d'un backslash. Voici quelques exemples illustrant les différents symboles (regardez la source de la page et non la page en elle-même : clic droit sur la page > Afficher la source / le code source) :

Code PHP :

<?php

echo 'lala \n lala';
echo "lala \n lala";
echo "lala \\n lala";

echo 'lala \t lala';
echo "lala \t lala";
echo "lala \\t lala";

echo 'lala \r lala';
echo "lala \r lala";
echo "lala \\r lala";

$a = 6;

echo 'lala $a lala';
echo "lala $a lala";
echo "lala \$a lala";

echo 'lala $b lala';
echo "lala $b lala";
echo "lala \$b lala";

Et voilà : on en a fini avec les différences entre les deux types de chaînes de caractères, n'hésitez surtout pas à tester un peu tout et n'importe quoi pour vous familiariser avec.

Nouvel opérateur : concaténation

ATTEBTION : Puisque vous maîtrisez les deux types de chaînes de caractères, je vais mélanger les deux sans vergogne ; alors si vous croyez ne pas avoir tout compris, relisez, testez, sinon vous serez largués.

Imaginons que nous ayons deux variables et que nous voulions les afficher, comment ferait-on cela ?

Code PHP :

<?php

$a = 'je suis';
$b = 'moi';
echo $a;
echo $b;


C'est long et répétitif, vous ne trouvez pas ? Eh bien ne pleurez plus, les développeurs du PHP ont prévu le coup en créant un opérateur génial : l'opérateur de concaténation. Redites ce mot dix fois de suite à haute voix et très rapidement.
Ne cherchez pas la définition de ce mot dans le dictionnaire, vous avez peu de chances de la trouver. Heureusement, on a appris à faire quelque chose qui va nous sauver la vie : chercher par nous-mêmes. Si vous voulez savoir ce qu'est la concaténation, bougez-vous les doigts. 

Le terme concaténation est issu du latin con (avec) et catena (chaîne) : il désigne l'action de mettre bout à bout deux chaînes.
En programmation, on appelle la concaténation de deux chaînes de caractères la chaîne formée de ces deux chaînes mises bout à bout.

Si vous ne savez pas ce qu'est la concaténation, allez sur Google ou sur un autre moteur de recherche, sinon préparez-vous à entrer dans un monde merveilleux.
L'opérateur de concaténation varie en fonction des langages ; en JavaScript, c'est le symbole plus (+). En PHP, c'est le symbole point (.).
Vous devez vous souvenir comment fonctionnent les opérateurs, non ? Si ce n'est pas le cas, allez relire ce chapitre !
Mettons la théorie en pratique :

Code PHP :

<?php

$a = 'Je suis';
$b = 'moi';
$c = $a . $b;
echo $c;

Fantastique, n'est-ce pas ?
Comme tout opérateur qui se respecte, l'opérateur de concaténation concatène deux expressions et en retourne une issue des deux autres. Ainsi, on peut réécrire le code de cette façon :

Code PHP :

<?php

$a = 'Je suis';
$b = 'Moi';
echo $a . $b;

C'est logique, après tout. On sait qu'echo affiche la valeur de l'expression qui est à sa droite. On sait également que l'opérateur de concaténation retourne une expression. Enfin, on sait que l'expression retournée par l'opérateur de concaténation est égale aux deux expressions qu'il doit concaténer mises bout à bout.
Ça fonctionne avec tous les types de variables vus précédemment, à une exception près : lequel, à votre avis ?

Code PHP :

<?php

echo 'a' . '1' . 'c';
echo 'a' . 1 . 'c';
echo 'a' . 5.65 . 'c';
echo 'a' . true . 'c';

ATTENTION : Faites TRÈS attention quand vous voulez concaténer des nombres à virgule : en effet, cette instruction : $a = 'b' . 5 . 65; ne produit pas le même résultat que celle-ci : $a = 'b' . 5.65;.
Prenons un exemple simple : je veux concaténer 5 et 7, j'écris naïvement cette instruction : $a = 5.7;.
Faites un var_dump(), et ô surprise, ça nous dit que c'est un nombre à virgule. Normal : pour créer un nombre à virgule, on utilise également un point.
C'est pourquoi je vous conseille de toujours mettre un espace entre l'opérateur de concaténation et les expressions ; exemple : $a = 5 . 7;.
Là, on n'a plus d'erreur. C'est une simple habitude à prendre, mais elle vous évitera bien des pièges.

Vous avez dû remarquer quelque chose de bizarre pour le dernier echo : en effet, ça nous affiche « a1c » au lieu de « atruec ». C'est tout à fait normal : l'opérateur de concaténation ne peut concaténer que des chaînes de caractères ; si on lui donne d'autres types, l'interpréteur PHP les transtype en chaînes de caractères. Pour les entiers et les nombres à virgule, ça ne pose pas de problème puisque les valeurs ne diffèrent pas. Mais quand on transtype un booléen en chaîne de caractères, ça donne soit 1 si le booléen vaut true, soit 0 si le booléen vaut false. On verra un peu plus tard quels types sont transtypés, et en quoi, dans différents cas !

On peut bien évidemment concaténer des variables, après tout ce sont des expressions comme les autres :

Code PHP :

<?php
$var =
'a';
$var = $var . 'a';
echo $var;

Ça fonctionne, mais vous ne trouvez pas ça lourd d'écrire quatre fois $var ? Personnellement, ça m'arrache les mains. C'est pour ça qu'à l'instar des opérateurs arithmétiques, il y a un second opérateur de concaténation : l'opérateur d'affectation de concaténation. Exemple :

Code PHP :

<?php

$var = 'a';
$var .= 'a';
echo $var;

Vous voilà incollables sur la concaténation. C'est souvent un concept qui pose problème : on oublie d'échapper des apostrophes ou des guillemets dans des chaînes de caractères, l'opérateur perd son rôle, on a des erreurs en pagaille, bref, ça va mal. Toutefois, si vous vous souvenez de son rôle (qui est de concaténer deux expressions) et que vous savez ce qu'est une expression, alors tout devrait bien se passer.

INFORMATION : L'opérateur de concaténation a la même priorité que les opérateurs arithmétiques d'addition et de soustraction. L'opérateur d'affectation de concaténation à la même priorité que les opérateurs +=, -=, etc.

À présent, les chaînes de caractères ne devraient plus avoir de secret pour vous, et c'est tant mieux car vous vous en servirez souvent et de plusieurs façons.

 

 

 


 

 

 


 

Infos Plan Partenaires
À propos Webmasters
C.G.U Services Gratuits Annuaire de sites web
Bannières Forum Ionoa

 

Aipoweb est un site édité par ASMOH NetWork  ©

Créer un site gratuit avec e-monsite - Signaler un contenu illicite sur ce site