Php guillemets simples et doubles. Différence entre les guillemets doubles et simples en PHP. Exemple #3 Exemple de définition de chaîne Heredoc

Comme vous l'avez vu dans le didacticiel précédent, la commande echo en php est un moyen de générer du texte. Tout au long de votre carrière PHP, vous utiliserez la commande echo plus que toute autre. Alors regardons-y bien !

Sortie ligne

Pour générer une chaîne, comme nous l'avons fait dans les leçons précédentes, echo est utilisé. Avec son aide, vous pouvez afficher du texte entre guillemets, des valeurs de variables, etc. Regardons un exemple.

J'adore utiliser PHP !"; ?>

Afficher la phrase « Bonjour ! » Nous sommes déjà familiers, il n'y a rien de nouveau ici. Mais la commande echo suivante, comme vous pouvez le voir, contient une balise html. Il n'est pas interdit d'utiliser des balises HTML, car PHP nous donne de la dynamique, et la statique et la conception des pages sont toujours à la merci du HTML classique.

Attention, guillemets doubles !

C'est très cool de pouvoir générer du HTML dans PHP. Cependant, soyez prudent lorsque vous utilisez du code HTML ou toute autre chaîne contenant des guillemets ! Echo utilise des guillemets pour définir le début et la fin d'une chaîne, vous devez donc utiliser l'une des options suivantes si vous souhaitez utiliser des guillemets dans echo :

  • N'utilisez pas de guillemets à l'intérieur d'une chaîne.
  • Échapper aux guillemets internes avec une barre oblique. Pour éviter de traiter les guillemets internes, placez simplement une barre oblique inverse juste devant eux, c'est-à-dire \".
  • Utilisez des guillemets simples (apostrophes) à l'intérieur de la chaîne.

Voir notre exemple ci-dessous pour l'utilisation correcte et incorrecte de la commande echo :

J'adore utiliser PHP !"; // OK car on a échappé aux guillemets ! echo "

J'adore utiliser PHP !
"; // OK car nous avons utilisé une apostrophe " echo "
J'adore utiliser PHP !
"; ?>

Si vous souhaitez afficher une chaîne contenant des guillemets, utilisez une apostrophe (') ou échappez les guillemets en plaçant une barre oblique (\") devant eux. La barre oblique inverse indiquera à PHP que vous souhaitez que le caractère qui le suit ne soit pas analysé par l'interpréteur !

Sortie variable

Dériver des variables est très simple. En fait, vous n’avez rien de spécial à faire pour afficher les variables en PHP. Il peut le faire lui-même. Voici un exemple pour vous aider à tout comprendre :

Résultat:

Bonjour Bob. Je m'appelle : 4a

Sortie simultanée de variables et de chaînes de texte

Vous pouvez également afficher les variables entre guillemets doubles (par exemple, "text text $variable"). En mettant une variable entre guillemets (""), vous indiquez à PHP que vous souhaitez qu'elle prenne sa valeur, la convertisse en type chaîne et la génère. L'exemple ci-dessous montre comment réaliser cette astuce correctement :)

"; echo "Bonjour, je m'appelle Bob. Qui es-tu ? $my_string
"; echo "Bonjour, je m'appelle Bob. Qui es-tu ? $my_string Bobetta"; ?>

Résultat:

Bonjour Bob. Je m'appelle : Bobetta Salut, je m'appelle Bob. Qui es-tu ? Bonjour Bob. Je m'appelle : Salut, je m'appelle Bob. Qui es-tu? Bonjour Bob. Je m'appelle : Bobetta

Placer des variables à l'intérieur d'une ligne peut gagner du temps et rendre votre code plus facile à lire, mais il faut un certain temps pour s'y habituer. N'oubliez pas d'utiliser des guillemets, les guillemets simples n'afficheront pas de valeurs variables. Les guillemets simples imprimeront simplement le nom de la variable dans une chaîne, c'est-à-dire $my_string, pas "Bonjour Bob. Mon nom est."

L'écho n'est pas une fonctionnalité !

Echo n'est pas une fonction, mais une construction de langage. Lors de l'utilisation de fonctions en PHP, elles ont une forme très spécifique, que nous reviendrons certainement un peu plus tard. Pour l’instant, sachez simplement qu’echo est un outil spécial que vous allez adorer ! :D

Concaténation de chaînes PHP

L’opération la plus courante avec les chaînes est peut-être leur concaténation ou la jonction d’une chaîne à une autre. Pour concaténer des chaînes, un opérateur spécial « » a été introduit. (point).

Exemple:


En sortie, nous obtenons la ligne complète : « Mon pays natal est vaste !

Les valeurs de type chaîne sont des chaînes de texte (chaînes en abrégé). Une chaîne est une séquence de zéro ou plusieurs caractères. Les caractères incluent les lettres, les chiffres, la ponctuation, les caractères spéciaux et les espaces.

Une chaîne peut être définie de quatre manières différentes :

  • guillemets doubles
  • guillemets simples
  • syntaxe hérdocienne
  • syntaxe nowdoc

Chaîne entre guillemets doubles

Chaîne entre guillemets :

Vous pouvez utiliser des séquences d'échappement dans des chaînes entre guillemets. Séquence de contrôle— ce sont des caractères spéciaux conçus pour formater la sortie de texte. Les séquences d'échappement suivantes sont disponibles en PHP :

La principale propriété des chaînes entre guillemets est la possibilité de gérer les variables à l’intérieur des chaînes.


Signe dollar : \$";

Les chaînes placées entre guillemets doubles peuvent contenir des guillemets simples :

Echo "Citation simple : "" ;

Chaîne entre guillemets simples (apostrophes)

Chaîne entre guillemets simples :

$str = "Chaîne" ; echo "Une grande ligne peut être divisée en plusieurs petites lignes pour faciliter la lecture.";

Contrairement aux chaînes entre guillemets et à la syntaxe héréditaire, les variables et les séquences de contrôle (à une exception près) entourées de guillemets simples ne sont pas traitées. Cela signifie qu'ils seront interprétés comme des caractères de chaîne normaux :

$num = 10 ; echo "Numéro : $num
Signe dollar : \$";

Pour pouvoir utiliser des guillemets simples dans une chaîne entourée de guillemets simples, vous devez les échapper à l'aide d'une barre oblique inverse (\"). Si vous devez écrire la barre oblique inverse elle-même, vous devez la dupliquer (\\) :

Echo "Utiliser des guillemets "simples" à l'intérieur" ; echo "Barre oblique inverse : \\" ;

Les chaînes placées entre guillemets simples peuvent contenir des guillemets doubles :

Echo "Citation double : "" ;

Syntaxe Hérédoc

La syntaxe Heredoc est une manière alternative d'écrire des chaînes.

Une chaîne définie à l'aide de la syntaxe Heredoc fonctionne de la même manière qu'une chaîne entourée de guillemets doubles. La différence entre Heredoc et une chaîne entre guillemets doubles est qu'avec Heredoc, il n'est pas nécessaire d'échapper aux guillemets doubles.

La syntaxe Heredoc commence par trois caractères<<< , после которых должен быть указан произвольный идентификатор (назовём его открывающим). Идентификатор может быть указан как в двойных кавычках, так и без них. Tout de suite l'identifiant doit être suivi d'une nouvelle ligne ; aucun autre caractère autre qu'une nouvelle ligne ne doit être après l'identifiant, sinon une erreur se produira. Vient ensuite le contenu de la chaîne elle-même. Après le contenu de la chaîne, sur une ligne distincte, un identifiant de fermeture doit être spécifié (le même qu'après<<<). Перед ним и после него не должно быть никаких пробелов или других символов, за исключением точки с запятой. Если это правило нарушено, то считается, что закрывающий идентификатор отсутствует и будет вызвана ошибка:

<<

Syntaxe Nowdoc

La syntaxe Nowdoc, comme Heredoc, est une manière alternative d'écrire des chaînes.

Une chaîne définie à l'aide de la syntaxe Nowdoc fonctionne de la même manière qu'une chaîne entre guillemets simples. La différence entre Nowdoc et une chaîne entre guillemets simples est qu'avec Nowdoc, il n'est pas nécessaire d'échapper aux guillemets simples.

La syntaxe de Nowdoc est similaire à Heredoc, à la seule différence que l'identifiant d'ouverture doit être placé entre guillemets simples :

$num = 10 ; écho<<<"some_id" Число: $num some_id;

Gestion des variables dans les chaînes

Il existe deux types de syntaxe pour gérer les variables dans les chaînes : simple Et difficile.

Syntaxe simple- c'est alors que le nom de la variable est indiqué tel quel dans la ligne.

Lorsque l'interpréteur rencontre un signe dollar, il commence à vérifier séquentiellement si tous les caractères suivants sont des caractères valides dans le nom de la variable. Ainsi, pour former un nom de variable valide, il capture autant de caractères que possible :

$str = "Monde !"; echo "Bonjour $str";

Syntaxe complexe- c'est à ce moment-là que le nom de la variable est placé entre accolades.

Puisque, pour traiter une variable dans une ligne, l'interpréteur capture autant de caractères que possible, il existe des situations où l'interprète n'est pas en mesure de déterminer indépendamment où se termine le nom de la variable :

$sport1 = "volonté" ; $sport2 = "pied" ; echo "J'aime $sport1ball et $sport2ball";

Dans ce cas, le résultat souhaité ne sera pas atteint car l'interprète considérera $sport1 comme faisant partie du nom de variable $sport1bol, qui n'existe pas.

Pour indiquer explicitement à l'interpréteur où se termine un nom de variable, vous devez mettre le nom de la variable entre accolades :

$sport1 = "volonté" ; $sport2 = "pied" ; echo "J'aime ($sport1)bol et ($sport2)bol.";

Le signe dollar peut être placé avant ou après l’accolade :

$sport1 = "volonté" ; $sport2 = "pied" ; echo "J'aime $(sport1)bol et ($sport2)bol.";

Enchaînement

La concaténation est la réunion de deux ou plusieurs chaînes en une seule chaîne plus grande. La concaténation s'effectue à l'aide de l'opérateur de concaténation - . (point). Lors de la concaténation, chaque ligne suivante est ajoutée à la fin de la précédente :

Une valeur de n'importe quel type concaténée avec une chaîne sera implicitement convertie en chaîne puis concaténée :

"; echo "Numéro : " . 1; ?>

La manière la plus simple de définir une chaîne est de la mettre entre guillemets simples (le symbole " ).

Pour utiliser un guillemet simple dans une chaîne, échappez-le avec une barre oblique inverse ( \ ). \\ Si vous devez écrire la barre oblique inverse elle-même, dupliquez-la ( ). Toutes les autres utilisations des barres obliques inverses seront interprétées comme des caractères normaux : cela signifie que si vous essayez d'utiliser d'autres séquences d'échappement telles que \r ou

\n , ils seront affichés tels quels au lieu de tout comportement spécial.;

\n écho
"c'est une simple chaîne"
"Vous pouvez également insérer dans des lignes
;

caractère de nouvelle ligne comme celui-ci,
\n C'est bien";

// Résultats : Arnold a dit un jour : "Je reviendrai" "Un jour, Arnold a dit : 'Je reviendrai.'';

Écho
"Avez-vous supprimé C:\\*.* ?"

// Sorties : avez-vous supprimé C:\*.* ?
\n "Ceci ne sera pas développé : \n nouvelle ligne";

// Sorties : les variables $expand et $either ne sont pas développées
\n "$expand et $soit les variables ne sont pas développées";
?>

Guillemets doubles

Si la chaîne est entourée de guillemets doubles ("), PHP reconnaît davantage de séquences d'échappement pour les caractères spéciaux :

Séquences d'évasion
Sous-séquence Signification
\r nouvelle ligne (LF ou 0x0A (10) en ASCII)
). retour chariot (CR ou 0x0D (13) en ASCII)
\t tabulation horizontale (HT ou 0x09 (9) en ASCII)
\v onglet vertical (VT ou 0x0B (11) en ASCII) (depuis PHP 5.2.5)
\e caractère d'échappement (ESC ou 0x1B (27) en ASCII) (depuis PHP 5.4.4)
\f flux de page (FF ou 0x0C (12) en ASCII) (depuis PHP 5.2.5)
\\ barre oblique inverse
\$ signe dollar
\" double citation
\{1,3} séquence de caractères correspondant à une expression régulière d'un caractère dans un système de numérotation octale
\x(1,2) séquence de caractères correspondant à l'expression régulière d'un caractère en notation hexadécimale

Comme pour une chaîne entourée de guillemets simples, l'échappement de tout caractère affichera également la barre oblique inverse elle-même. Avant PHP 5.1.1, barre oblique inverse dans \($var) n'a pas été publié.

Hérédoc

La troisième façon de définir des chaînes consiste à utiliser la syntaxe heredoc : <<< . Après cet opérateur, vous devez préciser un identifiant, puis un saut de ligne. Vient ensuite la ligne elle-même, puis le même identifiant, fermant l'insertion.

Doubler devrait commencez par un identifiant de fermeture, c'est-à-dire il doit apparaître dans la première colonne de la ligne. De plus, l'identifiant doit suivre les mêmes règles de dénomination que toutes les autres balises PHP : contenir uniquement des caractères alphanumériques et un trait de soulignement, et ne doit pas commencer par un chiffre (les traits de soulignement sont autorisés).

Attention

Il est très important de noter que la ligne d'identification de fermeture ne doit contenir aucun autre caractère à l'exception d'un point-virgule ( ; ). Cela signifie que l'identifiant ne devrait pas être en retrait et qu'il ne peut y avoir d'espaces ou de tabulations avant ou après le point-virgule. Il est également important de comprendre que le premier caractère avant l'identifiant de fermeture doit être le caractère de nouvelle ligne défini par votre système d'exploitation. Par exemple, sur les systèmes UNIX, notamment Mac OS X, cette \r. Après l'identifiant de fermeture, une nouvelle ligne doit également commencer immédiatement.

Si cette règle n'est pas respectée et que l'identifiant de fermeture n'est pas "propre", l'identifiant de fermeture est considéré comme manquant et PHP continuera à le rechercher. Si dans ce cas l'identifiant de fermeture correct n'est jamais trouvé, cela provoquera une erreur d'analyse avec le numéro de ligne à la fin du script.

Heredoc ne peut pas être utilisé pour initialiser les champs de classe.

À partir de PHP 5.3, cette restriction s'applique uniquement aux héréditaires contenant des variables.

Exemple n°1 Mauvais exemple
classe foo (<<barre $ publique =
bar
}
?>

EOT ;

Le texte Heredoc se comporte de la même manière qu’une chaîne entre guillemets doubles, sans les avoir. Cela signifie que vous n'avez pas besoin d'échapper aux guillemets dans Heredoc, mais vous pouvez toujours utiliser les séquences d'échappement ci-dessus.

Les variables sont traitées, mais vous devez être aussi prudent lorsque vous utilisez des variables complexes dans Heredoc que lorsque vous travaillez avec des chaînes.<<Exemple #2 Exemple de définition d'une chaîne héréditaire
$str =
Exemple de ligne,
couvrant plusieurs lignes,

en utilisant la syntaxe hérdocienne.
{
NEM ;
Nourriture de classe

var $foo ;
{
var $bar ;
Fonction foo()
}
}

$this -> foo = "Foo" ;
$ce ->

$foo = nouveau foo();<<$name = "MonNom" ; .
écho
Je m'appelle "$name". Je tape $foo -> foo .
Maintenant je déduis
( $foo -> barre [ 1 ])
?>

Cela devrait afficher la lettre majuscule "A": \x41

EOT ;

Je m'appelle "MonNom". Je tape Foo. Maintenant, je sors Bar2. Cela devrait afficher une lettre majuscule "A": A

Il est également possible d'utiliser la syntaxe heredoc pour transmettre des données via des arguments de fonction :

Depuis la version 5.3.0, il est devenu possible d'initialiser des variables statiques et des propriétés/constantes de classe en utilisant la syntaxe heredoc :
Exemple #4 Utiliser Heredoc pour initialiser des variables statiques
{
// Variables statiques<<fonction foo()
barre $ statique =
}

Il n'y a rien ici...
ÉTIQUETTE;
{
// Propriétés/constantes de classe<<classe foo
const BAR =

Exemple d'utilisation d'une constante<<FOOBAR ;
const BAR =
}
?>

Public $baz =

Exemple d'utilisation d'un champ

Depuis PHP 5.3.0, vous pouvez également entourer l'identifiant Heredoc de guillemets doubles : Maintenantdoc Nowdoc est le même pour les chaînes entre guillemets simples que heredoc pour les chaînes entre guillemets doubles. Nowdoc est similaire à Heredoc, mais à l'intérieur

Nowdoc est indiqué par la même séquence <<< , qui est utilisé dans l'hérdoc, mais l'identifiant suivant est placé entre guillemets simples, par exemple : <<<"EOT" .

Toutes les conditions qui s'appliquent aux identifiants heredoc s'appliquent également à nowdoc, en particulier celles qui s'appliquent à l'identifiant de fermeture.

Les variables sont traitées, mais vous devez être aussi prudent lorsque vous utilisez des variables complexes dans Heredoc que lorsque vous travaillez avec des chaînes.<<<"EOD"
Exemple #6 Exemple Nowdoc
Exemple de texte,
s'étendant sur plusieurs lignes
couvrant plusieurs lignes,

en utilisant la syntaxe nowdoc.
ÉTIQUETTE;
{
/* Exemple plus complexe avec des variables. */
public $foo ;

var $foo ;
{
var $bar ;
barre $ publique ;
}
}

$this -> foo = "Foo" ;
$ce ->

$foo = nouveau foo();<<<"EOT"
$this -> bar = array("Bar1" , "Bar2" , "Bar3" );
Je m'appelle "$name". J'imprime $foo->foo.
Maintenant, j'imprime ($foo->bar).
( $foo -> barre [ 1 ])
?>

Cela ne devrait pas afficher un "A" majuscule : \x41

Le résultat de l'exécution de cet exemple :

Je m'appelle "$name". J'imprime $foo->foo. Maintenant, j'imprime ($foo->bar). Cela ne devrait pas afficher un "A" majuscule : \x41:

Commentaire

Contrairement à Heredoc, Nowdoc peut être utilisé dans n'importe quel contexte avec des données statiques. Un exemple typique d'initialisation de champs de classe ou de constantes :

Exemple n°1 Mauvais exemple
classe foo (<<<"EOT"
barre $ publique =
( $foo -> barre [ 1 ])
}
?>

Je m'appelle "$name". J'imprime $foo->foo. Maintenant, j'imprime ($foo->bar). Cela ne devrait pas afficher un "A" majuscule : \x41:

Exemple #7 Exemple d'utilisation de données statiques

Le support de nowdoc a été ajouté dans PHP 5.3.0.

Gestion des variables

Si une chaîne est spécifiée entre guillemets doubles ou en utilisant heredoc, les variables qu'elle contient sont traitées. Il existe deux types de syntaxe : simple et complexe. Une syntaxe simple est plus simple et plus pratique. Il permet de traiter une variable, une valeur de tableau ( tableau) ou les propriétés de l'objet (

objet

) avec un minimum d'effort.

Une syntaxe complexe peut être identifiée par les accolades entourant l’expression. $ Syntaxe simple

Si l'interprète rencontre un signe dollar (

), il capture autant de caractères que possible pour former le nom de variable correct. Si vous souhaitez spécifier la fin d'un nom, placez le nom de la variable entre accolades.
$jus = "pomme" ;
echo "Il a bu du jus $juice." . PHP_EOL ;
// ne fonctionne pas, "s" est un caractère valide pour un nom de variable,
?>

Cela ne devrait pas afficher un "A" majuscule : \x41

// mais notre variable s'appelle $juice.

echo "Il a bu du jus composé de $jus." ; Il existe deux types de syntaxe : simple et complexe. Il a bu du jus de pomme. Il a bu du jus de . tableau Un élément de tableau ( ] ) ou la propriété de l'objet (

).

Dans les indices de tableau, il y a un crochet fermant (

) marque la fin de la définition de l'index.
Les mêmes règles s'appliquent aux propriétés des objets qu'aux variables simples.
echo "Il a bu du jus $juices [ koolaid1 ]." . PHP_EOL ;

les gens de classe (
public $john = "John Smith" ;
public $jane = "Jane Smith" ;
public $robert = "Robert Paulsen" ;

Public $smith = "Smith" ;
}

$people = nouvelles personnes();

echo "$people -> John a bu du jus $juices [ 0 ]." . PHP_EOL ;
echo " $people -> john a ensuite dit bonjour à $people -> jane ." . PHP_EOL ;
echo "$people -> la femme de John a salué $people -> robert." . PHP_EOL;
echo " $people -> Robert a salué les deux $people -> Smiths ." ; // Ne fonctionnera pas
?>

Cela ne devrait pas afficher un "A" majuscule : \x41

Il a bu du jus de pomme. Il a bu du jus d'orange. Il a bu du jus violet. John Smith a bu du jus de pomme. John Smith a ensuite dit bonjour à Jane Smith. L'épouse de John Smith a salué Robert Paulsen. Robert Paulsen a salué les deux.

Pour quelque chose de plus complexe, utilisez une syntaxe complexe.

Syntaxe complexe (bouclée)

On l’appelle complexe non pas parce qu’il est difficile à comprendre, mais parce qu’il permet l’utilisation d’expressions complexes.

Toute variable scalaire, élément de tableau ou propriété d'objet mappée à une chaîne peut être représentée dans une chaîne à l'aide de cette syntaxe. { Et } Écrivez simplement l'expression de la même manière que vous le feriez en dehors de la ligne, puis enveloppez-la { . $ Depuis { ne peut pas être échappé, cette syntaxe ne sera reconnue que lorsque {\$ suit directement {$ . Utiliser

imprimer
.

Quelques exemples illustratifs :

// Afficher toutes les erreurs
rapport d'erreur (E_ALL);

$génial = "super" ;
// Ne fonctionne pas, affiche : C'est (génial)
echo "C'est ($génial)" ;

// Fonctionne, résultats : c'est génial
\n echo "C'est ($génial)" ; echo "C'est $(super)" ;

// Travaux
"Cette place est large

// Fonctionne, résultats : c'est génial
( $square -> width ) 00 centimètres." ;

// Fonctionne, les mots-clés cités ne fonctionnent qu'avec la syntaxe des accolades
echo "Cela fonctionne : ( $arr [ "key" ]) " ;
echo "Cela fonctionne : ( $arr [ 4 ][ 3 ]) " ;
// Ceci n'est pas valide pour la même raison que $foo à l'extérieur
\n // lignes. En d'autres termes, cela fonctionnera toujours,// mais comme PHP recherche d'abord la constante foo, cela entraînera

// erreur de niveau E_NOTICE (constante non définie).
"C'est faux :
( $arr [ foo ][ 3 ]) " ;

// Travaux. Lors de l'utilisation de tableaux multidimensionnels en interne
// les lignes utilisent toujours des accolades

\n echo "Cela fonctionne : ( $arr [ "foo" ][ 3 ]) " ;// Travaux.

\n echo "Cela fonctionne : " . $arr [ "foo" ][ 3 ];"Ça marche aussi :

\n ( $obj -> valeurs [ 3 ]-> nom ) " ;($( getName ())) " ;

\n "Voici la valeur de la variable par nom renvoyée par \$object->getName() :($( $object -> getName ())) " ;

// Ne fonctionne pas, affiche : Voici ce que renvoie getName() : (getName())
\n "Voici ce que renvoie getName() : (getName())";
?>

Il est également possible d'accéder aux propriétés des objets dans les chaînes en utilisant cette syntaxe.

Exemple n°1 Mauvais exemple
var $bar = "Je suis bar." ;
}

$this -> foo = "Foo" ;
$barre = "barre" ;
$baz = array("foo" , "bar" , "baz" , "quux" );
echo " ( $foo -> $bar ) \n" ;
echo " ( $foo -> $baz [ 1 ]) \n" ;
?>

Cela ne devrait pas afficher un "A" majuscule : \x41

Je suis bar. Je suis bar.

Je m'appelle "$name". J'imprime $foo->foo. Maintenant, j'imprime ($foo->bar). Cela ne devrait pas afficher un "A" majuscule : \x41:

Les fonctions, les appels de méthodes, les variables de classe statiques et les constantes de classe fonctionnent en interne {$} , à partir de PHP 5. Cependant, la valeur fournie sera traitée comme un nom de variable dans le même contexte que la ligne dans laquelle elle est définie. {} Utiliser des accolades simples (

imprimer
.

) ne fonctionnera pas pour accéder aux valeurs des fonctions, méthodes, constantes de classe ou variables de classe statiques.
bières de classe (
const softdrink = "bière de racine" ;
}

public statique $ale = "ipa" ;
$rootbeer = "A&W" ;

$ipa = "Alexandre Keith\"s" ;
// Cela fonctionne, affiche : Je voudrais A & W

echo "Je voudrais ($( bières :: softdrink )) \n" ;
// Cela fonctionne aussi, résultats : je voudrais celui d'Alexander Keith
?>

echo "Je voudrais ($( bières :: $ale )) \n" ;

Accéder et modifier un caractère dans une chaîne Les caractères des chaînes peuvent être utilisés et modifiés en spécifiant leur décalage par rapport au début de la chaîne, en commençant par zéro, entre crochets après la chaîne, par exemple $str . Et Considérez une chaîne à cet effet comme un tableau de caractères..

Je m'appelle "$name". J'imprime $foo->foo. Maintenant, j'imprime ($foo->bar). Cela ne devrait pas afficher un "A" majuscule : \x41: Si vous devez obtenir ou remplacer plus d'un caractère, vous pouvez utiliser les fonctions

Attention

sousstr() substr_replace() Un caractère dans une chaîne est également accessible à l'aide d'accolades, par exemple $str(42) . substr_replace() Tenter d'écrire dans un décalage au-delà des limites de la ligne remplira la chaîne avec des espaces jusqu'à ce décalage. Les types non entiers seront convertis en types entiers.

Attention

Un mauvais type de décalage entraînera une erreur de niveau

E_AVIS

.
L'écriture sur un décalage négatif entraînera une erreur de niveau
, et une fois lu, il renverra une chaîne vide.

// Récupère le troisième caractère de la chaîne
$troisième = $str [ 2 ];

// Récupère le dernier caractère de la chaîne
$str = "Ceci est encore un test." ;
$last = $str [ strlen ($str ) - 1 ];

// Change le dernier caractère de la ligne
$str = "Regardez la mer" ;
$str [ strlen ($str )- 1 ] = "e" ;

?>

Depuis PHP 5.4, le décalage dans la chaîne doit être spécifié soit sous forme d'entier, soit sous forme de chaîne contenant des chiffres, sinon un avertissement sera émis. Décalage précédemment donné par une chaîne comme "foo", sans avertissement, s'est transformé en 0 .

Exemple #10 Différences entre PHP 5.3 et PHP 5.4

$str = "abc" ;

Var_dump($str["1"]);
var_dump (isset($str [ "1" ]));

Var_dump($str["1.0"]);
var_dump (isset($str [ "1.0" ]));

Var_dump($str["x"]);
var_dump (isset($str [ "x" ]));

Var_dump($str["1x"]);
var_dump (isset($str [ "1x" ]));
?>

Le résultat de l'exécution de cet exemple en PHP 5.3 :

chaîne (1) "b" bool (vrai) chaîne (1) "b" bool (vrai) chaîne (1) "a" bool (vrai) chaîne (1) "b" bool (vrai)

Le résultat de l'exécution de cet exemple en PHP 5.4 :

string(1) "b" bool(true) Avertissement : décalage de chaîne illégal "1.0" dans /tmp/t.php à la ligne 7 string(1) "b" bool(false) Avertissement : décalage de chaîne illégal "x" dans / tmp/t.php à la ligne 9 string(1) "a" bool(false) string(1) "b" bool(false)

Je m'appelle "$name". J'imprime $foo->foo. Maintenant, j'imprime ($foo->bar). Cela ne devrait pas afficher un "A" majuscule : \x41:

Essayer d'accéder à des variables d'autres types (à l'exclusion des tableaux ou des objets qui implémentent certaines interfaces) en utilisant ou {} reviendra silencieusement NUL.

Je m'appelle "$name". J'imprime $foo->foo. Maintenant, j'imprime ($foo->bar). Cela ne devrait pas afficher un "A" majuscule : \x41:

PHP 5.5 a ajouté la prise en charge de l'accès aux caractères dans les chaînes littérales à l'aide de la syntaxe Toutes les autres utilisations des barres obliques inverses seront interprétées comme des caractères normaux : cela signifie que si vous essayez d'utiliser d'autres séquences d'échappement telles que {} .

Il existe de nombreuses fonctions utiles pour modifier les chaînes.

Les fonctions de base sont décrites dans la section sur les fonctions de chaîne, ainsi que pour les fonctions avancées de recherche et de remplacement, d'expression régulière ou d'expression régulière compatible Perl.

Convertir en chaîne

La valeur peut être convertie en chaîne à l'aide d'un cast (chaîne), ou des fonctions strval(). \n ou Dans les expressions où une chaîne est requise, la conversion se produit automatiquement. Cela se produit lorsque vous utilisez des fonctions imprimer.

, ou lorsque la valeur d'une variable est comparée à une chaîne. La lecture des sections Types et Manipulation de type du manuel rendra ce qui suit plus clair. Voir aussi settype() Les tableaux sont toujours convertis en chaîne Il existe deux types de syntaxe : simple et complexe."Tableau" \n Toutes les autres utilisations des barres obliques inverses seront interprétées comme des caractères normaux : cela signifie que si vous essayez d'utiliser d'autres séquences d'échappement telles que Dans les expressions où une chaîne est requise, la conversion se produit automatiquement., vous ne pouvez donc pas afficher le contenu du tableau ( ), en utilisant pour voir ce qu'il contient. Pour afficher un seul élément, utilisez quelque chose comme

echo $arr["foo"] . Voir ci-dessous pour obtenir des conseils sur la façon d'afficher/afficher tout le contenu.. tableau Si vous souhaitez afficher les valeurs des champs d'un objet ( ) à des fins de débogage, lisez la suite. Si vous souhaitez obtenir le nom de classe de l'objet requis, utilisez get_class()

NUL. Depuis PHP 5, la méthode __toString est également disponible.

est toujours converti en chaîne vide. Comme vous pouvez le voir ci-dessus, la conversion directe de tableaux, d'objets ou de ressources en chaîne ne fournit aucune information utile sur les valeurs elles-mêmes autres que leurs types. Et Une meilleure façon de générer des valeurs pour le débogage consiste à utiliser des fonctions.

print_r() var_dump() La plupart des valeurs en PHP peuvent être converties en chaîne pour un stockage persistant. Cette méthode est appelée sérialisation et peut être effectuée à l'aide de la fonction

sérialiser()

. De plus, si votre installation PHP prend en charge WDDX, la sérialisation vers une structure XML est également possible.

Conversion de chaînes en nombres Si la chaîne est reconnue comme une valeur numérique, la valeur et le type résultants sont déterminés comme suit. Si la chaîne ne contient aucun des caractères ".", "e" ou "E" et que la valeur du nombre se situe dans les limites des nombres entiers (définis PHP_INT_MAX), la chaîne sera reconnue comme un entier ( entier).

).

Dans tous les autres cas, il est considéré comme un nombre à virgule flottante ( flotter
La valeur est déterminée par le début de la chaîne. Si la ligne commence par une valeur numérique valide, cette valeur sera utilisée. Sinon la valeur sera 0 (zéro). Une valeur numérique valide est constituée d'un ou plusieurs chiffres (pouvant contenir un point décimal), éventuellement précédés d'un signe, suivis d'un exposant facultatif. L'exposant est "e" ou "E" suivi d'un ou plusieurs chiffres. $foo = 1 + "10,5" ;
// $foo est un float (11.5)
$foo = 1 + "-1.3e3" ;
// $foo est un flottant (-1299) $foo = 1 + "bob-1.3e3" ; // $foo est un entier (1)
$foo = 1 + "bob3" ; // $foo est un entier (1) $foo = 1 + "10 petits cochons" ;
// $foo est un entier (11)
$foo = 4 + "10.2 Petits Cochons" ;
?>

// $foo est un float (14.2)

$foo = "10,0 cochons " + 1 ; // $foo est flottant (11)

$foo = "10,0 cochons " + 1,0 ; // $foo est flottant (11)
Pour plus d'informations sur cette conversion, consultez la section sur strtod(3) dans la documentation Unix.
?>

Ne vous attendez pas à obtenir le code d'un caractère en le convertissant en entier (comme cela se fait par exemple en C). Pour convertir les caractères en leurs codes ASCII et inversement, utilisez les fonctions ord() Et chr().

Détails d'implémentation du type de chaîne

Type de chaîne ( chaîne) en PHP est implémenté sous la forme d'un tableau d'octets et d'un entier contenant la longueur du tampon. Il ne contient aucune information sur la façon de convertir ces octets en caractères, laissant cette tâche au programmeur. Il n'y a aucune restriction sur le contenu d'une chaîne, comme un octet avec une valeur 0 (octet "NUL") peut être situé n'importe où (toutefois, sachez que certaines fonctions, comme indiqué dans ce manuel, ne sont pas "binairement sécurisées", c'est-à-dire qu'elles peuvent transmettre des chaînes à des bibliothèques qui ignorent les données après l'octet NUL).

Cette nature du type chaîne explique pourquoi PHP n'a pas de type « octet » distinct – les chaînes jouent ce rôle. Les fonctions qui renvoient des données non textuelles (par exemple, un flux de données arbitraire lu à partir d'une socket réseau) renvoient toujours des chaînes.

Étant donné que PHP ne dicte pas de codage spécifique pour les chaînes, on peut se demander comment les chaînes littérales sont ensuite codées. Par exemple, la ligne "á" équivalent "\xE1"(ISO-8859-1), "\xC3\xA1"(UTF-8, formulaire de normalisation C), "\x61\xCC\x81"(UTF-8, forme de normalisation D) ou une autre représentation possible ? La réponse est que la chaîne sera codée de la même manière qu'elle est écrite dans le fichier de script. Ainsi, si le script est écrit en codage ISO-8859-1, alors la chaîne sera codée en ISO-8859-1, etc. Cependant, cette règle ne s'applique pas lorsque le mode Zend Multibyte est activé : dans ce cas, le script peut être écrit dans n'importe quel encodage (soit explicitement spécifié, soit déterminé automatiquement), puis converti en un encodage interne spécifique, qui sera ensuite utilisé pour chaînes littérales.

Bien entendu, pour être utiles, les fonctions de chaîne doivent faire certaines hypothèses sur le codage de la chaîne. Malheureusement, parmi les fonctions PHP, il existe une grande variété d'approches pour résoudre ce problème :

  • Certaines fonctions supposent que la chaîne est codée sur un seul octet, mais elles n'ont pas besoin d'interpréter les octets comme des caractères spécifiques pour fonctionner correctement. Les caractères des chaînes peuvent être utilisés et modifiés en spécifiant leur décalage par rapport au début de la chaîne, en commençant par zéro, entre crochets après la chaîne, par exemple $str ., Cette catégorie comprend par exemple, strpos() strlen() Et strcmp()
  • . Une autre façon de concevoir ces fonctions est qu'elles fonctionnent sur des tampons mémoire, c'est-à-dire ils travaillent directement avec les octets et leurs décalages.
  • compensations. D'autres fonctions s'attendent à ce qu'un encodage soit passé en paramètre, en supposant peut-être un encodage par défaut si un paramètre avec un encodage n'a pas été spécifié. Cette fonction est Enfin, certaines fonctions supposent qu'une chaîne utilise un codage spécifique, généralement UTF-8. La plupart des fonctions des extensions intl et PCRE tombent ici (dans ce dernier cas, uniquement lors de la spécification du modificateur toi). Bien que cela soit fait exprès, la fonction utf8_decode() implique un encodage UTF-8, et

utf8_encode()

-ISO-8859-1.

En fin de compte, écrire des programmes corrects qui fonctionnent avec Unicode signifie éviter soigneusement les fonctions qui ne fonctionnent pas avec Unicode et sont susceptibles de corrompre les données, et utiliser à la place des fonctions valides, généralement issues des extensions intl et mbstring.

Cependant, utiliser des fonctions compatibles Unicode est un bon début. Quelles que soient les fonctionnalités offertes par un langage, il est nécessaire de connaître la spécification d’Unicode lui-même. Par exemple, si un programme suppose que seules les lettres minuscules et majuscules existent dans une langue, il commet une grave erreur.

La raison ici est simple : l'interpréteur PHP vérifie en outre les chaînes entre guillemets doubles pour la présence de variables, et si elles sont trouvées, alors au lieu du nom de la variable, sa valeur est insérée dans la chaîne. Mais une ligne entourée d'apostrophes est perçue par l'interpréteur comme du texte normal et PHP n'effectue aucune transformation dans ces lignes. Je pense qu'il est clair que le traitement des chaînes entre guillemets simples sera de toute façon plus rapide.

Tout d'abord, décrivons comment définir une chaîne, puis vérifions à quel point il sera plus rapide de traiter les chaînes entre guillemets simples.

La manière la plus simple de définir une chaîne est de la mettre entre guillemets simples ("). Pour utiliser des guillemets simples dans une chaîne entre guillemets simples, ils doivent être précédés d'une barre oblique inverse (\), c'est-à-dire échappée. Si la barre oblique inverse doit venir avant un guillemet simple ou à la fin de la ligne, vous devez le dupliquer. Si vous essayez d'échapper un autre caractère, la barre oblique inverse sera également imprimée.

Voici un exemple d'utilisation de guillemets simples :
// Sortie : chaîne simple
echo "Chaîne simple" ;
// Tirages : je suis là
echo "Je suis là" ;
// Sortie : Cela n'insérera pas : \n nouvelle ligne
echo "Cela n'insérera pas :\nnewline" ;
// Sorties : La variable $example ne sera pas non plus remplacée
echo "La variable $exemple ne sera pas non plus remplacée";

Si une chaîne est entourée de guillemets doubles ("), PHP reconnaît davantage de séquences d'échappement pour les caractères spéciaux et substitue également le nom de la variable dans la chaîne à sa valeur. Tout comme avec les guillemets simples, afin d'utiliser des guillemets doubles dans une chaîne entourée de guillemets doubles, ils doivent être précédés d'un caractère barre oblique inverse (\).
// Sortie : chaîne simple
echo "Chaîne simple" ;
Voici un exemple d'utilisation de guillemets doubles :
// Sorties : Société "Snowdrop"
echo "Société \"Perce-neige\"";
// Sortie : Cela mènera à une nouvelle ligne
echo "Cela passera à une nouvelle ligne \n";
// Sortie : La variable sera remplacée
$exemple = "sera remplacé" ;

Voyons à quel point les guillemets simples sont plus rapides que les guillemets doubles. Pour les mesures, nous rédigerons un court script de test, et nous constaterons immédiatement que si vous le testez vous-même, les résultats, qui dépendent du matériel de votre PC ou serveur, seront différents.
// Renvoie l'horodatage au début de la boucle
$start = microtime(true);
// Crée une boucle pour 1 million d'itérations
pour ($i = 0; $i< 1000000; $i++) {
$text = "Voici une chaîne de caractères";
}
// Calculer le temps passé
$time = (microtime(true) - $start);

Résultat : 0,09 seconde.
Si on remplace les guillemets simples par des guillemets doubles :

$text = "Voici une chaîne de caractères";
Le résultat sera de 0,10 seconde.
Comme vous pouvez le constater, lors de l’utilisation de chaînes de texte, la différence de temps d’exécution est très faible, on pourrait même dire qu’elle n’existe pas du tout. Le plaisir commence lorsque nous essayons de combiner une chaîne et une variable.

$text = "Voici la chaîne de caractères $i";

ou

$text = $i."Voici une chaîne de caractères";

Résultat environ : 0,27 seconde.

La différence est assez notable. La concaténation et les guillemets doubles affectent clairement les performances lorsque des variables sont ajoutées à la chaîne.

Par conséquent, si nous devons afficher le texte « tel quel », nous utilisons des guillemets simples. Si vous devez remplacer sa valeur au lieu d'une variable, utilisez des valeurs doubles (s'il n'y a qu'une seule variable, vous pouvez alors omettre complètement les guillemets). Vous pouvez souvent voir du code comme celui-ci :

Seul le texte est affiché. Mais dans le code, pour une raison inconnue, il est placé entre guillemets, ce qui oblige l'interprète à l'analyser pour détecter la présence de variables. Il est correct de mettre le texte entre guillemets simples.

Considérons la tâche triviale consistant à afficher une variable dans le cadre d'un texte, notamment en utilisant du code HTML.

$date"; ?>

Tout s'affiche bien, le texte et la date sont soulignés en gras, qui se substitue à la variable. Mais vous devez vous rappeler deux choses. Premièrement, il s'agit d'une fonctionnalité de l'interpréteur : la concaténation de chaînes est beaucoup plus rapide et nécessite moins de ressources que l'analyse de chaînes. Et deuxièmement, n’oubliez pas le paradigme de programmation « diviser pour mieux régner ». Il n'est pas nécessaire de tout mélanger en un seul ; il serait beaucoup plus correct de diviser le texte en deux parties : celles qui nécessitent et celles qui ne nécessitent pas d'analyse par l'interprète. L'exemple ci-dessus devrait donc être écrit comme ceci :

".$date.""; ?>

Naturellement, vous devez suivre cette règle (entourer tout ce qui ne nécessite pas d'analyse entre guillemets simples) non seulement lors de l'affichage du texte, mais également lors de l'attribution de valeurs aux variables de chaîne :

Ou, par exemple, lorsque vous utilisez des chaînes lors du passage d'arguments de fonction :

Et bien que sur les ordinateurs modernes le gain de temps pour interpréter le code en fonction de l'utilisation de guillemets simples ou doubles soit pratiquement imperceptible, surtout dans les petits scripts, cela vaut quand même la peine de s'habituer dès le début à écrire du code compétent, c'est beaucoup plus facile que réapprendre plus tard.