Wat is het verschil tussen enkele aanhalingstekens en dubbele aanhalingstekens in PHP?

Ik ben een beetje in de war waarom ik code in PHP zie met een string tussen enkele aanhalingstekens en soms tussen dubbele aanhalingstekens.

Ik weet alleen dat in .NET, of de C-taal, als het tussen een enkel aanhalingsteken staat, dit betekent dat het een teken is, geen string.


Antwoord 1, autoriteit 100%

PHP-tekenreeksenkunnen worden opgegeven niet alleen op tweemanieren, maar op viermanieren.

  1. Enkel strings tussen aanhalingstekenszullen de dingen bijna volledig “zoals ze zijn” weergeven. Variabelen en de meeste escape-reeksen worden niet geïnterpreteerd. De uitzondering is dat om een letterlijk enkel aanhalingsteken weer te geven, u deze kunt escapen met een backslash \', en om een backslash weer te geven, u kunt deze escapen met een andere backslash \\(Dus ja, zelfs enkele tekenreeksen tussen aanhalingstekens worden geparseerd).
  2. Dubbel quote stringszullen een groot aantal escapetekens weergeven (inclusief enkele regexes), en variabelen in de strings zullen worden geëvalueerd. Een belangrijk punt hierbij is dat u accolades kunt gebruiken om de naam van de variabele die u wilt evalueren te isoleren. Laten we bijvoorbeeld zeggen dat je de variabele $typehebt en je wilt echo "The $types are". Die zoekt naar de variabele $types. Om dit te omzeilen, gebruikt u echo "The {$type}s are"U kunt de linker accolade voor of na het dollarteken plaatsen. Kijk eens naar string-parsingom te zien hoe u arrayvariabelen en dergelijke gebruikt.
  3. Heredoc tekenreekssyntaxis werkt als tekenreeksen tussen dubbele aanhalingstekens. Het begint met <<<. Na deze operator wordt een identificatie gegeven en vervolgens een nieuwe regel. De string zelf volgt, en dan weer dezelfde identifier om het citaat te sluiten. U hoeft in deze syntaxis niet te ontsnappen aan aanhalingstekens.
  4. Nowdoc (sinds PHP 5.3.0) tekenreekssyntaxis werkt in wezen als tekenreeksen met enkele aanhalingstekens. Het verschil is dat zelfs enkele aanhalingstekens of backslashes niet hoeven te worden escaped. Een nowdoc wordt geïdentificeerd met dezelfde <<<-volgorde die wordt gebruikt voor heredocs, maar de ID die volgt wordt tussen enkele aanhalingstekens geplaatst, b.v. <<<'EOT'. Er wordt niet geparseerd in nowdoc.

Opmerkingen:
Enkele aanhalingstekens tussen enkele aanhalingstekens en dubbele aanhalingstekens tussen dubbele aanhalingstekens moeten worden voorzien van escapetekens:

$string = 'He said "What\'s up?"';
$string = "He said \"What's up?\"";

Snelheid:
Ik zou niet te veel gewicht hechten aan enkele aanhalingstekens die sneller zijn dan dubbele aanhalingstekens. Ze zijn waarschijnlijk sneller in bepaalde situaties. Hier is een artikel een manier uitleggen waarop enkele en dubbele aanhalingstekens in wezen even snel zijn sinds PHP 4.3(Useless Optimizationsonderaan, sectie C). Deze benchmarkpaginaheeft ook een vergelijking tussen enkele en dubbele aanhalingstekens. De meeste vergelijkingen zijn hetzelfde. Er is één vergelijking waarbij dubbele aanhalingstekens langzamer zijn dan enkele aanhalingstekens.


Antwoord 2, autoriteit 20%

Dingen worden geëvalueerd tussen dubbele aanhalingstekens, maar niet in enkele:

$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.

Antwoord 3, autoriteit 6%

'Enkele aanhalingstekens

De eenvoudigste manier om een tekenreeks op te geven, is door deze tussen enkele aanhalingstekens te plaatsen. Enkele aanhalingstekens zijn over het algemeen sneller en alles wat erin wordt geciteerd, wordt behandeld als een gewone tekenreeks.

Voorbeeld:

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

"Dubbele aanhalingstekens

Gebruik dubbele aanhalingstekens in PHP om te voorkomen dat u de periode tot een afzonderlijke code moet gebruiken (OPMERKING: Gebruik Curly Braces {}om variabelen op te nemen als u geen aaneenschakeling wilt gebruiken (.) Operator) in string.

Voorbeeld:

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

Is er een PHEPECTION-PENSING Single Quote vs Double Quote in PHP?

Ja. Het is iets sneller om afzonderlijke aanhalingstekens te gebruiken.

PHP zal geen extra verwerking gebruiken om te interpreteren wat er in de single-quote bevindt. Wanneer u dubbele aanhalingstekens gebruikt, moet PHP parseren om te controleren of er variabelen binnen de reeks zijn.


4, Autoriteit 4%

Een single-geciteerde tekenreeks heeft geen variabelen binnen het geïnterpreteerd. Een dubbel-geciteerde reeks doet.

Ook kan een dubbel-geciteerde tekenreeks apostrofen bevatten zonder backslashes, terwijl een enkel-geciteerde tekenreeks ongecapte aanhalingstekens kan bevatten.

De single-geciteerde snaren zijn sneller op runtime omdat ze niet moeten worden geparseerd.


5, Autoriteit 3%

In PHP, zowel 'my name'en "my name"zijn string. Je kunt er meer over lezen bij de PHP-handleiding .

wat u moet weten, zijn

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

In PHP gebruiken mensen één offerte om een ​​constante string te definiëren, zoals 'a', 'my name', 'abc xyz', terwijl u dubbele offerte gebruikt om een ​​tekenreeks te definiëren, zoals identifier zoals "a $b $c $d".

en ander is,

echo 'my name';

is sneller dan

echo "my name";

maar

echo 'my ' . $a;

is langzamer dan

echo "my $a";

Dit geldt voor andere gebruikte tekenreeksen.


Antwoord 6, autoriteit 2%

Voorbeeld van enkele, dubbele, heredoc en nowdoc aanhalingstekens

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

Antwoord 7, autoriteit 2%

In PHP wordt enkele aanhalingstekens beschouwd als tekenreekswaarde en dubbele aanhalingstekens zullen de variabelen ontleden door hun waarde te vervangen en te verwerken.

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

Hier ontleden dubbele aanhalingstekens de waarde en enkele aanhalingstekens wordt beschouwd als tekenreekswaarde (zonder de variabele $testte ontleden.)


Antwoord 8

Het verschil tussen het gebruik van enkele aanhalingstekens en dubbele aanhalingstekens in php is dat als we enkele aanhalingstekens gebruiken in een echo-statement, het wordt behandeld als een tekenreeks. … maar als we de variabelenaam tussen dubbele aanhalingstekens invoeren, wordt de waarde van die variabele samen met de tekenreeks weergegeven.


Antwoord 9

Sommigen zullen misschien zeggen dat ik een beetje off-topic ben, maar hier is het toch:

U hoeft vanwege de inhoud van uw tekenreeks niet per se te kiezen tussen:
echo "It's \"game\" time.";of echo 'It\'s "game" time.';

Als u bekend bent met het gebruik van de Engelse aanhalingstekens en het juiste teken voor de apostrof, kunt u dubbele of enkele aanhalingstekens gebruiken, want dat maakt niet meer uit:
echo "It’s “game” time.";en echo 'It\'s "game" time.';

Natuurlijk kunt u indien nodig ook variabelen toevoegen. Vergeet alleen niet dat ze alleen worden geëvalueerd als ze tussen dubbele aanhalingstekens staan!


Antwoord 10

Eén ding:

Het is erg belangrijk op te merken dat de regel met de afsluitende identifier van Heredocgeen andere tekens mag bevatten, behalve een puntkomma (;). Dat betekent vooral dat de identifier niet ingesprongenmag zijn en dat er geen spatiesof tabbladenvoor of na de puntkomma mogen staan.

Voorbeeld:

  $str = <<<EOD
Example of string
spanning multiple lines
using heredoc syntax.
EOD;

Antwoord 11

Hier enkele mogelijkheden van enkele en dubbele aanhalingstekens met variabele

$world = "world";
"Hello '.$world.' ";
'hello ".$world."';

Other episodes