Faire joujou avec des variables
Vous avez appris à manipuler des variables dès la partie I. Depuis, vous vous êtes sûrement rendus compte que vous avez besoin de variables dans la totalité de vos scripts PHP.
Le but de ce chapitre est de vous apprendre quelques "techniques" vous permettant d'encore mieux les manipuler :
- Nous verrons dans un premier temps la concaténation : c'est juste une bonne habitude à prendre qui rendra votre code plus propre.
- Nous verrons ensuite une série de fonctions toutes prêtes en PHP permettant de travailler sur des variables. Ce sont des outils très pratiques (et faciles à utiliser) dont vous ne pourrez bientôt plus vous passer

- Enfin, pour terminer le chapitre en beauté, je vais vous apprendre à faire un truc très tordu : des variables variables !

Que d'émotions en perspective
Concaténation.
Derrière ce mot barbare qui semble réservé aux gourous de l'informatique se cache en fait... un point ! Oui oui, vous avez bien entendu, un misérable petit point comme celui-ci
.
Voyons voir un exemple concret. Regardez-moi ce code, digne des premiers chapitres de ce cours :
Code : PHP1
2
3
4 | <?php
$nom = "Mateo21";
echo "Salut $nom, comment ça va ?";
?>
|
Ca va jusque là, pas trop dur ?

Ca affichera :
Salut Mateo21, comment ça va ?
Eh bien, laissez-moi vous en apprendre une bien bonne. Le code ci-dessous produira
exactement le même résultat :
Code : PHP1
2
3
4 | <?php
$nom = 'Mateo21';
echo 'Salut ' . $nom . ', comment ça va ?';
?>
|
Et ça, c'est ce qu'on appelle une concaténation. Vous avez remarqué le point ? C'est ce qui permet de faire le lien entre votre variable et le reste de votre texte.
Autre chose qui a dû vous surprendre : j'utilise désormais des apostrophes à la place des guillemets pour délimiter du texte. On peut toujours utiliser des guillemets, mais avec des concaténations les apostrophes c'est plus propre.
A partir de cet instant, nous allons utiliser uniquement la concaténation. Nous allons utiliser la concaténation et des apostrophes pratiquement tout le temps.
Mais... mais... Tu nous prends pour des abrutis ? Tu nous as appris à faire différemment avant, et maintenant tu veux qu'on utilise ta concaténation et tes apostrophes ?
Et pis, je vois pas ce que ça a de si génial la concaténation moi...
Voilà de bonnes questions

Il faut savoir que, dans une première version de ce cours PHP, je parlais de la concaténation dès le début (dans le premier chapitre sur les variables). Et visiblement, ça posait problème : ça faisait trop de choses à la fois au début.
Donc, j'ai préféré vous apprendre une technique plus simple, en attendant. Mais mettez-vous ça dans la tête, la concaténation c'est =>
MIEUX<=
Désormais, vous verrez que j'utilise le plus souvent des apostrophes à la place des guillemets. Je vous invite à faire de même, nous allons voir que ça a quelques avantages.
La concaténation
Elle permet de faire plus de choses. Par exemple, comment mélanger deux variables ? Avec une concaténation !
Code : PHP1
2
3
4
5
6 | <?php
$prenom = 'Jean ';
$nom = 'Dupont';
$nom_complet = $prenom . $nom;
?>
|
$nom_complet vaudra "Jean Dupont".
Ca, vous verrez que c'est très pratique. En plus, c'est facile à faire et à comprendre n'est-ce pas ? On dit à PHP :
$nom_complet vaut $prenom et $nom
Le "et" correspond au petit point de la concaténation.
On peut aussi faire une concaténation sur une même variable. Tordu, mais pratique là encore :
Code : PHP1
2
3
4 | <?php
$phrase = 'Je suis ';
$phrase = $phrase . 'un Zér0';
?>
|
A la fin, $phrase vaudra "Je suis un Zér0".
Pourquoi faire une concaténation sur une même variable me direz-vous ? Eh bien, parfois vous avez besoin de mettre beaucoup de texte dans une variable. Plutôt que de tout écrire sur une même ligne, vous passez à la ligne suivante (comme j'ai fait) et vous utilisez une concaténation pour associer le contenu de la variable avec la suite de la phrase.
Astuce ! Lorsque vous faites une concaténation sur une même variable, vous pouvez aussi écrire $phrase .= 'un Zér0';
C'est un raccourci qui vous évite à avoir à écrire $phrase 2 fois sur une même ligne.
On s'arrêtera là pour la concaténation, il n'y a rien de bien compliqué
Les apostrophes
Concernant les apostrophes (que j'utiliserai désormais à la place des guillemets), j'imagine que ça doit vous perturber un petit peu. Voici donc quelques points à savoir à propos de ces apostrophes, car je veux que vous compreniez
pourquoi je préfère les utiliser :
- Premier point, le plus important : si une variable est entre apostrophes, on n'affiche pas son contenu contrairement aux guillemets.
C'est-à-dire que si on a une variable $var = 'Manger' :
- echo "$var"; affichera Manger
- echo '$var'; affichera $var
Maintenant qu'on a la concaténation, ça n'est plus un problème. On n'écrira plus jamais de variables entre apostrophes, donc on ne risque pas de voir $var s'afficher.
Pour afficher le contenu de $var on écrira donc : echo 'Texte' . $var . 'Suite du texte';
- Si vous utilisez des apostrophes, vous n'aurez plus à taper d'antislash \ devant vos guillemets. C'est très utile car en HTML on doit écrire beaucoup de guillemets, ça nous évite d'écrire des tonnes d'antislashs. Par exemple, sur ce code on s'est évité 4 antislashs :
echo '<img src="monimage.jpg" alt="Ceci est une image" />';
- Par contre, vous vous demandez comment on va insérer des apostrophes maintenant ? C'est le revers de la médaille, il faudra cette fois mettre des antislashs devant les apostrophes :
echo 'Il l\'a trouvé chez son ami Paco';
Mais bon, vu qu'en pratique on est plus souvent amenés à utiliser du HTML avec des guillemets que de longs textes littéraires avec plein d'apostrophes, c'est plus avantageux de se servir des apostrophes pour délimiter son texte.
Voilou c'est tout

Et rappellez-vous : à partir de maintenant si j'en vois un qui n'utilise pas la concaténation ou qui se sert encore des guillemets, je l'étripe
Maintenant, nous allons voir une série de fonctions toutes prêtes en PHP qui travaillent sur des chaînes de caractères.
Une chaîne de caractères, c'est tout simplement une variable qui contient du texte. En anglais on dit string
Par exemple : "Ceci est une chaîne de caractères".
Les fonctions que vous allez voir sont toutes très simples à utiliser, encore faut-il les connaître quand on en a besoin

Je vais vous lister les plus utiles et vous expliquer rapidement leur fonctionnement. Pour connaître toutes les fonctions travaillant sur des chaînes de caractères, n'hésitez pas à
consulter le manuel PHP (un peu austère certes, mais terriblement efficace !)
addslashes
Cette fonction ajoute des anti-slashs
\ dans votre chaîne. Pourquoi faire ? Pour éviter d'avoir des bugs si votre chaîne contient des guillemets ou des apostrophes. Vous n'en voyez peut-être pas l'utilité maintenant, mais retenez bien que cette fonction existe car vous en aurez forcément besoin plus tard.
On l'utilise comme ceci :
Code : PHP1
2
3 | <?php
$nouvelle_variable = addslashes($ancienne_variable);
?>
|
Par exemple, on a cette chaîne :
Elvis Presley était le "King", y'a aucun doute !
Après passage à addslashes, ça deviendra :
Elvis Presley était le \"King\", y\'a aucun doute !
Vous voyez, ça ajoute les anti-slashs juste devant les apostrophes et les guillemets !
stripslashes
Bah là, je vais pas faire long : cette fonction, c'est exactement l'inverse de addslashes. Ca enlève les anti-slashs de votre chaîne.
Code : PHP1
2
3 | <?php
$nouvelle_variable = stripslashes($ancienne_variable);
?>
|
Si on a la chaîne :
Elvis Presley était le \"King\", y\'a aucun doute !
Après passage à stripslashes, ça redeviendra :
Elvis Presley était le "King", y'a aucun doute !
htmlspecialchars
Celle-là, vous l'avez déjà vue si je ne m'abuse

Elle convertit les caractères HTML d'une chaîne en un code qui ne risque pas de s'exécuter. Très pratique par exemple si vous faites un mini-chat et que vous voulez empêcher vos visiteurs d'utiliser du HTML !
Code : PHP1
2
3
4
5
6 | <?php
$variable_html = '<em>Ceci est une variable qui contient du HTML</em>';
$variable_sans_html = htmlspecialchars($variable_html);
echo 'Avant : ' . $variable_html . '<br />Après : ' . $variable_sans_html;
?>
|
Remarquez au passage la zolie concaténation
Il existe d'autres fonctions similaires qui peuvent vous être utiles : htmlspecialchars bloque uniquement les caractères les plus utilisés en HTML (< > & " '), tandis que strip_tags supprime carrément toutes les balises HTML .
nl2br
Ultra-pratique, on s'en servira dans le prochain chapitre !

La fonction nl2br transforme toutes les "Entrées" qu'a tapé votre visiteur en code HTML "<br />" (qui correspond à un retour à la ligne).
En effet, comme vous le savez peut-être déjà, en HTML une "Entrée" n'a aucun effet (ça ne crée pas de retour à la ligne). Heureusement qu'il y a nl2br, moi je vous le dis
Code : PHP1
2
3
4
5
6
7
8
9 | <?php
$ma_variable = 'Ceci est la première ligne.
Ceci est la seconde ligne.
Ceci est la troisième ligne.
Bon on arrête là...';
$ma_variable = nl2br($ma_variable);
echo $ma_variable;
?>
|
Hé ho ! Une minute ! Je vois pas ce qu'il fait de si extraordinaire ton code moi ?!
On essaie sans le nl2br ? Vous allez voir :
Code : PHP1
2
3
4
5
6
7
8 | <?php
$ma_variable = 'Ceci est la première ligne.
Ceci est la seconde ligne.
Ceci est la troisième ligne.
Bon on arrête là...';
echo $ma_variable;
?>
|
Comme vous pouvez le voir, sans nl2br les retours à la ligne ne se font pas tous seuls ! Eh oui c'est pas la faute à PHP, c'est le langage HTML qui est fait ainsi.
strlen
Cette fonction retourne la longueur d'une chaîne de caractères, c'est-à-dire le nombre de lettres et chiffres qu'il y a (espaces compris). Exemple :
Code : PHP1
2
3
4
5
6
7 | <?php
$phrase = 'Bonjour les Zér0s ! Je suis une phrase !';
$longueur = strlen($phrase);
echo 'La phrase ci-dessous comporte ' . $longueur . ' caractères :<br />' . $phrase;
?>
|
Comptez les caractères si ça vous amuse, il y en a bien 41 je vous assure !
str_replace
str_replace remplace une chaîne de caractères par une autre. Exemple :
Code : PHP1
2
3
4
5 | <?php
$ma_variable = str_replace('b', 'p', 'bim bam boum');
echo $ma_variable;
?>
|
On a besoin d'indiquer 3 paramètres :
- La chaîne qu'on recherche. Ici, on recherche les "b" (on aurait pu rechercher un mot aussi).
- La chaîne qu'on veut mettre à la place. Ici, on met des "p" à la place des "b".
- La chaîne dans laquelle on doit faire la recherche.
Ce qui nous donne "pim pam poum"
str_shuffle
Pour vous amuser à mélanger aléatoirement les caractères de votre chaîne !
Code : PHP1
2
3
4
5
6 | <?php
$chaine = 'Cette chaîne va être mélangée !';
$chaine = str_shuffle($chaine);
echo $chaine;
?>
|
strtolower
strtolower met tous les caractères d'une chaîne en minuscule.
Code : PHP1
2
3
4
5
6 | <?php
$chaine = 'COMMENT CA JE CRIE TROP FORT ???';
$chaine = strtolower($chaine);
echo $chaine;
?>
|
A noter qu'il existe strtoupper qui fait la même chose en sens inverse : minuscules => majuscules.
J'en vois déjà qui ouvrent des yeux grands comme ça :

Non non je vous rassure, vous ne voyez pas double !
Il s'agit d'un truc qui va paraître bien tiré par les cheveux au premier abord. Mais, moi qui ne savais pas que ça existait, quand j'ai découvert que PHP savait faire ce genre de trucs j'étais vraiment aux anges
On va partir d'un problème concret.
Je possède 3 variables : $ville, $pays, $continent. Je veux, en fonction de la valeur d'une autre variable ($afficher), afficher le contenu d'une de ces 3 variables (je vous avais dit que c'était tiré par les cheveux :p).
SI $afficher vaut "ville", ALORS afficher le contenu de $ville.
SI $afficher vaut "pays", ALORS affiche le contenu de $pays.
SI $afficher vaut "continent", ALORS affiche le contenu de $continent.
Normalement vous êtes capables d'écrire ce code non ? Je pense que vous utiliseriez des conditions :
Code : PHP 1
2
3
4
5
6
7
8
9
10
11
12
13
14 | <?php
if ($afficher == 'ville')
{
echo $ville;
}
elseif ($afficher == 'pays')
{
echo $pays;
}
elseif ($afficher == 'continent')
{
echo $continent;
}
?>
|
Taratata... C'est lourd, c'est répétitif, et souvent vous n'aurez pas un problème avec 3 variables mais plutôt 300. Je vous vois mal faire 300 "if" dans votre code
La solution ? Demander à PHP d'afficher le contenu d'une variable en fonction d'une autre variable.
Pour cela, on utilisera un dollar suivi d'accolades (
${}). En fait, on écrira ${$afficher}.
$afficher sera remplacé par sa valeur (par exemple "ville"), et du coup PHP comprendra qu'il s'agit de la variable $ville !
Vu que vous êtes sceptiques (on l'est forcément quand on vient de lire les atrocités tordues que je viens de vous sortir), voici un code source qui fonctionne comme le précédent :
Code : PHP 1
2
3
4
5
6
7
8
9
10 | <?php
$afficher = 'ville'; // Modifiez la valeur de $afficher pour voir...
// On définit les 3 variables dont on a parlé
$ville = 'Marseille';
$pays = 'France';
$continent = 'Europe';
echo ${$afficher}; // On affiche la variable dont le nom est "ville" dans notre exemple
?>
|
Je reconnais que c'est difficile à expliquer avec des mots, et pour une fois (je dis bien pour une fois), je crois que c'est plus simple à comprendre en lisant le code source
Donc, lisez et relisez bien ce code, vous allez rapidement comprendre comment ça marche. Et surtout, faites des tests chez vous : mettez par exemple $afficher = "pays" pour voir ce que ça fait
On peut aller plus loin. Entre les accolades, vous pouvez mettre le texte que vous voulez, utilisez juste une concaténation dedans !
echo ${'mateo_' . $afficher};
Ce qui dans notre exemple afficherait le contenu de la variable $mateo_ville !
De ce chapitre, il faut retenir :
- Que la concaténation et les apostrophes c'est bien, il faut les utiliser.
- La liste des fonctions que je vous ai faite sur les chaînes de caractères. L'idéal c'est de connaître ça par coeur (c'est pas bien long) car vous vous en servirez pratiquement tout le temps !
Les variables variables, c'est quelques chose d'un peu plus particulier. Retenez juste que ça existe, et si un jour vous en avez besoin retournez lire ce chapitre pour savoir comment on fait
Informations sur le tutoriel
Retour en haut
Créé : Le 19/07/2005 à 23:21:44
Modifié : Le 17/06/2009 à 11:18:12
Avancement : 100%
Licence : Copie non autorisée
31 commentaires