Les chaînes de caractères

Les chaînes de caractères peuvent être définies en utilisant deux types de délimiteurs.

Si la chaîne de caractères est délimitée par des guillemets doubles ("), les variables à l'intérieur de la chaîne seront évaluées, et remplacées par leur valeur. Comme en C ou en Perl, le caractère antislash (\) est utilisé pour protéger (échapper) un caractère spécial.

Tableau 6-1. Les caractères spéciaux

séquencevaleur
\nNouvelle ligne (linefeed, LF ou 0x0A en ASCII)
\rRetour à la ligne(carriage return, CR ou 0x0D en ASCII)
\tTabulation horizontale (HT ou 0x09 en ASCII)
\\Antislash
\$Caractère $
\"Guillemet double
\[0-7]{1,3} Une séquence de caractère qui permet de rechercher un nombre en notation octale.
\x[0-9A-Fa-f]{1,2} Une séquence de caractère qui permet de rechercher un nombre en notation hexadécimale.

Vous pouvez utiliser le caractère d'échappement antislash sur n'importe quel autre caractère, mais cela produira une alerte (si le niveau d'alerte maximal a été fixé). En PHP 3.0, une alerte sera affichée, si le niveau de rapport d'erreur est à E_NOTICE. En PHP 4.0, aucune alerte ne sera générée.

Le deuxième moyen de délimiter une chaîne de caractère est d'utiliser les guillemets simples ("'"). Dans une telle chaîne de caractères, les variables ne seront pas évaluées, et le caractère antislash n'aura aucun effet (à deux exceptions près, pour "\\" et "\'", afin de pouvoir utiliser les caractères guillemets simples, et antislash dans la chaîne de caractères).

Un autre moyen de délimiter les chaînes est d'utiliser la syntaxe de "Here doc" (en français, doc ici): <<<, suivi d'un identifiant arbitraire, puis de la chaîne. Cette séquence se termine par l'identifiant initial, placé en premier sur une nouvelle 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é.

La syntaxe Here doc 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 aporté que dans les chaînes à guillemets doubles.

Exemple 6-1. Exemple de chaîne Here Doc


<?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;
?>
     

Note : Le support Here doc a été ajouté en PHP 4.

Les chaînes peuvent être concaténées avec l'opérateur '.' (point). Notez que l'opérateur '+' (addition) ne fonctionera pas. Reportez vous à Opérateurs de chaînes pour plus d'informations.

Exemple 6-2. Quelques exemples de chaînes


<?php
/* Assignation d'une chaîne */
$str = "Ceci est une chaîne ";
/*  Concaténation d'une chaîne */
$str = $str . " avec une extension";
/* Une autre méthode de concaténation, y compris une nouvelle ligne */
$str .= " et terminée par une nouvelle ligne.\n";
/* Cette chaî se terminera par '<B>Nombre: 9</B>' */
$nombre = 9;
$str = "<B>Nombre: $nombre</B>";
/* Cette ci sera '<B>Nombre: $num</B>' */
$num = 9;
$str = '<B>Nombre: $num</B>';
/* Lire le premier caractère d'une chaîne  */
$str = 'Ceci est un test.';
$first = $str[0];
/* Lire le dernier caractère d'une chaîne */
$str = 'Ceci est un autre test.';
$last = $str[strlen($str)-1];
?>
     

Conversion de type

Lorsqu'une chaîne de caractère 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ère '.', '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).

Lorsque la première expression est une chaîne de caractères, le type de la variable dépend de la seconde expression.


<?php
$foo = 1 + "10.5";              // $foo est du type  double (11.5)
$foo = 1 + "-1.3e3";            // $foo est du type  double (-1299)
$foo = 1 + "bob-1.3e3";         // $foo est du type  integer (1)
$foo = 1 + "bob3";              // $foo est du type  integer (1)
$foo = 1 + "10 Small Pigs";     // $foo est du type  integer (11)
$foo = 1 + "10 Little Piggies"; // $foo est du type  integer (11)
$foo = "10.0 pigs " + 1;        // $foo est du type  integer (11)
$foo = "10.0 pigs " + 1.0;      // $foo est du type  double (11)
?>
     

Pour plus d'informations sur les conversions de type, voir les pages de man à propos de la fonction strtod(3).

Si vous voulez testez 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";
?>