|
Table des matières
Les chaînes de caractèresLes 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.
SyntaxeUne chaîne peut être spécifiée de trois manières différentes : Guillemets simplesLe 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 ou 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.
<?php echo 'Ceci est une chaîne simple'; echo 'Vous pouvez inclure des nouvelles lignes dans une chaîne, comme ceci.'; echo 'Arnold a coutume de dire : "I\'ll be back"'; // affiche : "I'll be back" echo 'Êtes-vous sûr de vouloir effacer le dossier C:\\*.*?'; // affiche : Êtes-vous sûr de vouloir effacer le dossier C:\*.*? echo 'Êtes-vous sûr de vouloir effacer le dossier C:\*.*?'; // affiche : Êtes-vous sûr de vouloir effacer le dossier C:\*.*? echo 'Je suis en train de mettre une nouvelle ligne comme ceci : \n'; // affiche : Je suis en train de mettre une nouvelle ligne comme ceci : \n echo 'Les variables ne seront pas $afficher $ici'; // affiche : Les variables ne seront pas $afficher $ici ?> Guillemets doublesSi 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
Si vous essayez d’utiliser l’anti-slash sur n’importe quelle autre séquence, l’anti-slash sera affiché dans votre chaîne. Avant PHP 5.1.1, l’anti-slash dans “\{$var}” n’était pas affiché. Syntaxe "Heredoc"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 fermant doit commencer à la première colonne de la ligne. 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é.
<?php class foo { public $bar = <<<EOT bar EOT; } ?> 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.
<?php $str = <<<EOD Exemple de chaîne s'étalant sur plusieurs lignes avec la syntaxe heredoc EOD; /* Exemple plus complexe, avec des variables. */ class foo { var $foo; var $bar; function foo() { $this->foo = 'Foo'; $this->bar = array('Bar1', 'Bar2', 'Bar3'); } } $foo = new foo(); $name = 'MonNom'; echo <<<EOT Mon nom est "$name". J'affiche des $foo->foo. Maintenant, j'affiche un {$foo->bar[1]}. Ceci se traduit par un 'A' majuscule : \x41 EOT; ?>
Traitement des variables dans les chaînesLorsqu’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. La syntaxe complexe a été introduite en PHP 4 et peut être reconnue grâce aux accolades entourant les expressions. Syntaxe simpleDè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.
<?php $boisson = 'vin'; echo "Du $boisson, du pain et du fromage !"; // Correct, car "," n'est pas autorisé dans les noms de variables echo 'Il a goûté plusieurs ' . $boissons; // Pas correct, car 's' peut faire partie d'un nom de variable, et PHP recherchera alors $boissons echo "Il a goûté plusieurs ${boisson}s"; // Correct ?> 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.
<?php // Ces exemples sont spécifiques à l'utilisation de tableaux dans une chaîne. // Lorsque vous êtes hors d'une chaîne, utilisez toujours des guillemets // autour des index de tableau, et n'utilisez pas d'{accolades}. // Affichons toutes les erreurs error_reporting(E_ALL); $fruits = array('fraise' => 'rouge', 'banane' => 'jaune'); // Fonctionne mais notez que cela ne fonctionne pas comme // si c'était hors d'une chaîne echo "Une banane est $fruits[banane]."; // Fonctionne echo "Une banane est {$fruits['banane']}."; // Fonctionne mais PHP cherche une constante appelée banane // tel que décrit ci-dessous echo "Une banane est {$fruits[banane]}."; // Ne fonctionne pas, il manque les accolades. Cela donne une erreur d'analyse echo "Une banane est $fruits['banane']."; // Fonctionne echo "Une banane est " . $fruits['banane'] . "."; // Fonctionne echo "Ce carré a un côté de $square->width mètres de large."; // Ne fonctionne pas. Pour une solution, voyez la syntaxe complexe. echo "Ce carré a un côté de $square->width00 centimètres."; ?> Pour tout ce qui sera plus compliqué, voyez la syntaxe complexe. Syntaxe complexeLa syntaxe est dite “complexe” car elle permet l’utilisation d’ expressions complexes et non pas parce qu’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 ““{\$”” pour obtenir un ““{$”” littéral. Voici quelques exemples :
<?php // Affichons toutes les erreurs error_reporting(E_ALL); $super = 'fantastique'; // Ne fonctionne pas. Affiche : Ceci est { fantastique} echo "Ceci est { $super}"; // Fonctionne. Affiche Ceci est fantastique echo "This is {$super}"; echo "This is ${super}"; // Fonctionne echo "Ce carré a un coté de {$square->width}00 centimètres."; // Fonctionne echo "Ceci fonctionne : {$arr[4][3]}"; // Ceci est faut pour la même raison que $foo[bar] est faux // hors d'une chaîne. En d'autres termes, cela va fonctionner // car PHP recherche d'abord une constante appelée foo, mais // il générera une note E_NOTICE (undefined constant). echo "Ceci est faux : {$arr[foo][3]}"; // Fonctionne. Lorsque vous utilisez un tableau multidimensionnel dans // une chaîne, n'oubliez jamais les accolades. echo "Ceci fonctionne : {$arr['foo'][3]}"; // Fonctionne echo "Ceci fonctionne : " . $arr['foo'][3]; echo "Vous pouvez même écrire {$obj->values[3]->name}"; echo "Ceci est une valeur de variable variable : {${$name}}"; ?> Accès et modification des caractères d'une chaîneLes caractères d’une chaîne sont accessibles et modifiables en spécifiant leur offset (le premier caractère est d’offset 0) avec des crochets comme ceci : “$str[42]”, donc, voyez une chaîne de caractères comme un tableau de caractères.
<?php // Lit le premier caractère de la chaîne $str = 'Ceci est un test.'; $first = $str[0]; // Lit le troisième caractère de la chaîne $third = $str[2]; // Lit le dernier caractère de la chaîne $str = 'Ceci est un test.'; $last = $str[strlen($str)-1]; // Modifie le dernier caractère de la chaîne $str = 'Ceci est un test.'; $str[strlen($str)-1] = 'e'; // Méthode alternative utilisant des {}, obsolète depuis PHP 6 $third = $str{2}; ?> Fonctions et opérateurs pratiquesLes 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. Conversion en une [[language.types.string.html|chaîne de caractèresVous 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 souhaitez 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. Conversion de chaînes de caractèresLorsqu’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 optionnel, suivies par un ou plusieurs digits (optionnellement, contenant un point de décimal), suivies par un exponentiel optionnel. L’exponentiel peut être un ‘e’ ou un ‘E’ suivi par un ou plusieurs digits.
<?php $foo = 1 + "10.5"; // $foo est du type float (11.5) $foo = 1 + "-1.3e3"; // $foo est du type float (-1299) $foo = 1 + "bob-1.3e3"; // $foo est du type integer (1) $foo = 1 + "bob3"; // $foo est du type integer (1) $foo = 1 + "10 petits cochons"; // $foo est du type integer (11) $foo = 4 + "10.2 gros cochons"; // $foo est du type float (14.2) $foo = "10.0 cochons " + 1; // $foo est du type float (11) $foo = "10.0 cochons " + 1.0; // $foo est du type float (11) ?> 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 :
<?php echo "\$foo==$foo; type is " . gettype( $foo ) . "<br />\n"; ?> 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. Travail collaboratifContribuez, en ajjoutant des elements a cette page de manuel : Merci de votre aide |