Quelle est la différence entre les chaînes entre guillemets simples et guillemets doubles en PHP?

Je ne suis pas un expert en programmation PHP, mais je suis un peu confus pourquoi je vois du code en PHP avec une chaîne placée entre guillemets simples et parfois entre guillemets doubles.

Je sais juste dans. NET, ou le langage C, s'il est entre guillemets simples, cela signifie que c'est un caractère, pas une chaîne.

681
demandé sur Peter Mortensen 2010-08-10 09:12:56

11 réponses

Chaînes de PHP peut être spécifié non seulement dans deux façons, mais dans le quatre façons.

  1. chaînes entre guillemets simples afficher les choses presque complètement " tel quel."Les Variables et la plupart des séquences d'échappement ne seront pas interprétées. L'exception est que pour afficher un littéral apostrophe, vous pouvez échapper avec une barre oblique inverse \', et l'affichage d'une barre oblique inversée, vous pouvez échapper avec une autre barre oblique inverse \\ (Donc oui, même seul les chaînes entre guillemets sont analysées ).
  2. chaînes de guillemets doubles affichera une foule de caractères échappés (y compris certaines expressions rationnelles), et les variables dans les chaînes seront évaluées. Un point important ici est que Vous pouvez utiliser des accolades pour isoler le nom de la variable que vous voulez évaluer. Par exemple, disons que vous avez la variable $type et que echo "The $types are" Qui va chercher la variable $types. Pour contourner cette utilisation echo "The {$type}s are" vous pouvez mettre la gauche Accolade avant ou après le signe du dollar. Jetez un oeil à traitement de chaîne pour voir comment utiliser la matrice de variables.
  3. Heredoc la syntaxe de chaîne fonctionne comme des chaînes entre guillemets doubles. Il commence par <<<. Après cet opérateur, un identifiant est fourni, puis une nouvelle ligne. La chaîne elle-même suit, puis le même identifiant à nouveau pour fermer la citation. Vous n'avez pas besoin d'échapper des guillemets dans cette syntaxe.
  4. Nowdoc (depuis PHP 5.3.0) la syntaxe de chaîne fonctionne essentiellement comme des chaînes entre guillemets simples. La différence est que même les guillemets simples ou les barres obliques inverses ne doivent pas être échappés. Un nowdoc est identifié avec la même séquence <<< utilisée pour heredocs, mais l'identifiant qui suit est entre guillemets simples, par exemple <<<'EOT'. aucune analyse n'est effectuée dans nowdoc.

Vitesse:
Je ne mettrais pas trop de poids sur les guillemets simples étant plus rapides que les guillemets doubles. Ils sont probablement plus rapides dans certains situation. Voici un article expliquant une manière dont les guillemets simples et doubles sont essentiellement aussi rapides depuis PHP 4.3 (Useless Optimizations vers le bas, section C). En outre, cette Page benchmarks a une comparaison simple vs double citation. La plupart des comparaisons sont les mêmes. Il y a une comparaison où les guillemets doubles sont plus lents que les guillemets simples.

947
répondu Peter Ajtai 2015-04-11 12:23:00

Les choses sont évaluées entre guillemets doubles mais pas en simple:

$s = "dollars";
echo 'This costs a lot of $s.'; // This costs a lot of $s.
echo "This costs a lot of $s."; // This costs a lot of dollars.
178
répondu Dani 2010-08-10 05:19:34

Cité unique

Le moyen le plus simple de spécifier une chaîne est de la placer entre guillemets simples. La citation unique est généralement plus rapide, et tout ce qui est cité à l'intérieur est traité comme une chaîne simple.

Exemple:

echo 'Start with a simple string';
echo 'String\'s apostrophe';
echo 'String with a php variable'.$name;

Guillemets doubles

Utilisez des guillemets doubles en PHP pour éviter d'avoir à utiliser le point pour séparer le code (Note: utilisez des accolades {} pour inclure des variables Si vous ne voulez pas utiliser l'opérateur de concaténation (.)) dans la chaîne.

Exemple:

echo "Start with a simple string";
echo "String's apostrophe";
echo "String with a php variable {$name}";

Est y a-t-il un avantage de performance citation unique vs citation double en PHP?

Oui. Il est légèrement plus rapide d'utiliser des guillemets simples.

PHP n'utilisera pas de traitement supplémentaire pour interpréter ce qui est à l'intérieur de la citation unique. lorsque vous utilisez des guillemets PHP doit analyser pour vérifier si toutes les variables de là.

37
répondu Janak Kanani 2015-04-11 12:26:28

Une chaîne entre guillemets simples n'a pas de variables interprétées. Une chaîne entre guillemets double fait.

En outre, une chaîne entre guillemets doubles peut contenir des apostrophes sans barre oblique inverse, tandis qu'une chaîne entre guillemets simples peut contenir des guillemets Non échappés.

Les chaînes entre guillemets simples sont plus rapides à l'exécution car elles n'ont pas besoin d'être analysées.

34
répondu Borealid 2010-08-10 05:15:17

En PHP, 'my name' et "my name" sont des chaînes. Vous pouvez en savoir plus à ce sujet dans le manuel PHP .

Ce que vous devriez savoir sont

$a = 'name';
$b = "my $a"; == 'my name'
$c = 'my $a'; != 'my name'

En PHP, les gens utilisent un guillemet unique pour définir une chaîne constante, comme 'a', 'my name', 'abc xyz', tout en utilisant un guillemet double pour définir une chaîne contient un identifiant comme "a $b $c $d".

Et autre chose est,

echo 'my name';

Est plus rapide que

echo "my name";

Mais

echo 'my ' . $a;

Est plus lent que

echo "my $a";

C'est vrai pour autre utilisé de chaîne.

23
répondu Bang Dao 2015-04-11 12:24:45

Exemple de guillemets simples, doubles, heredoc et nowdoc

<?php

    $fname = "David";

    // Single quotes
    echo 'My name is $fname .'; // My name is $fname.

    // Double quotes
    echo "My name is $fname."; // My name is David.`

    // Curly braces to isolate the name of the variable
    echo "My name is {$fname}."; // My name is David.

    // Example of heredoc
    echo $foo = <<<abc
    My name is {$fname}
    abc;

        // Example of nowdoc
        echo <<< 'abc'
        My name is "$name".
        Now, I am printing some
    abc;

?>
15
répondu Rabindra Nath 2018-03-11 14:36:44

Les deux types de caractères fermés sont des chaînes. Un type de citation est idéalement utilisé pour joindre l'autre type de devis. "'" et '"'. La plus grande différence entre les types de guillemets est que les références d'identifiant fermées sont substituées à l'intérieur des guillemets doubles, mais pas à l'intérieur des guillemets simples.

11
répondu wallyk 2010-08-10 05:15:35

En PHP, le texte de guillemets simples est considéré comme une valeur de chaîne et le texte de guillemets doubles analysera les variables en remplaçant et en traitant leur valeur.

$test = "variable";
echo "Hello Mr $test"; // the output would be: Hello Mr variable
echo 'Hello Mr $test'; // the output would be: Hello Mr $test

Ici, double guillemet analyse la valeur et le guillemet simple est considéré comme une valeur de chaîne (sans analyser la variable $ test.)

11
répondu Maulik Bhojani 2014-09-04 20:58:43

Peut-être que je suis un peu en retard, et un peu hors sujet, mais ici c'est quand même...

Vous n'avez pas à choisir en raison du contenu de votre chaîne entre:
alert("It's \"game\" time."); ou alert('It\'s "game" time.');

Au lieu de cela, vous pouvez taper comme ceci, puis utiliser des guillemets doubles ou simples, car cela n'aura pas d'importance:
alert("It’s “game” time."); et alert('It’s “game” time.');

0
répondu Takit Isy 2018-04-09 13:09:29
$name = 'test';
$singleQuote = 'This is example for single quote $name'; // here $name variable not evaluating 
echo $singleQuote; // Output: This is example for single quote $name
$singleQuote = "This is example for single quote $name"; // here $name variable will evaluate and replace variable value
echo $singleQuote; // Output: This is example for single quote test

Also inside single quote expression evaluate faster campare to double quotes
0
répondu Mahadeva Prasad 2018-04-09 13:18:40

Une chose:

Il est très important de noter que la ligne avec l'identifiant de fermeture de Heredoc ne doit contenir aucun autre caractère, sauf un point-virgule (;) . Cela signifie en particulier que l'identifiant ne peut pas être retrait, et il peut ne pas être tout espaces ou onglets avant ou après le point-virgule.

Exemple:

   $str = <<<EOD
Example of string
spanning multiple lines
using heredoc syntax.
EOD;
-1
répondu srmilon 2017-01-03 06:28:00