В чем разница между строками в одинарных и двойных кавычках в PHP?


Я не эксперт в программировании на PHP, но меня немного смущает, почему я вижу некоторый код на PHP со строкой, заключенной в одинарные кавычки, а иногда и в двойные кавычки.

Я просто знаю, что в .NET или на языке C, если он заключен в одинарную кавычку, это означает, что это символ, а не строка.

Author: Peter Mortensen, 2010-08-10

11 answers

Строки PHP может быть задан не только двумя способами, но и четырьмя способами.

  1. Строки в одинарных кавычках будет отображаться почти полностью "как есть". Переменные и большинство escape-последовательностей не будут интерпретироваться. Исключением является то, что для отображения буквальной одинарной кавычки вы можете избежать ее с помощью обратной косой черты \', а для отображения обратной косой черты вы можете избежать ее с помощью другой обратной косой черты \\ ( Так что да, даже строки в одинарных кавычках анализируются).
  2. Строки с двойными кавычками отобразит множество экранированных символов (включая некоторые регулярные выражения), и переменные в строках будут оценены. Важным моментом здесь является то, что вы можете использовать фигурные скобки, чтобы изолировать имя переменной, которую вы хотите оценить. Например, предположим, что у вас есть переменная $type и вам нужно echo "The $types are", которая будет искать переменную $types. Чтобы обойти это, используйте echo "The {$type}s are" Вы можете положить левая скобка до или после знака доллара. Взгляните на синтаксический анализ строк, чтобы узнать, как использовать переменные массива и тому подобное.
  3. Наследственность синтаксис строк работает как строки в двойных кавычках. Он начинается с <<<. После этого оператора указывается идентификатор, а затем новая строка. Далее следует сама строка, а затем снова тот же идентификатор, чтобы закрыть цитату. Вам не нужно экранировать кавычки в этом синтаксисе.
  4. Теперь я ( начиная с PHP 5.3.0) строковый синтаксис работает по существу как строки в одинарных кавычках. Разница в том, что даже одинарные кавычки или обратные косые черты не нужно экранировать. Nowdoc идентифицируется с той же последовательностью <<<, которая используется для heredoc, но следующий идентификатор заключен в одинарные кавычки, например <<<'EOT'. В nowdoc синтаксический анализ не выполняется.

Скорость:
Я бы не придавал слишком большого значения тому, что одинарные кавычки быстрее двойных. Они, вероятно, быстрее в некоторых ситуации. Вот статья , объясняющая один из способов, которым одинарные и двойные кавычки по существу одинаково быстры, начиная с PHP 4.3 (Useless Optimizations ближе к основанию, раздел C). Кроме того, это страница тестов имеет сравнение одной и двойной кавычек. Большинство сравнений одинаковы. Есть одно сравнение, в котором двойные кавычки работают медленнее, чем одинарные.

 947
Author: Peter Ajtai, 2015-04-11 12:23:00

Вещи оцениваются в двойных кавычках, но не в одинарных:

$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
Author: Dani, 2010-08-10 05:19:34

Одинарные кавычки

Самый простой способ указать строку - заключить ее в одинарные кавычки. Одинарная кавычка, как правило, быстрее, и все, что цитируется внутри, обрабатывается как простая строка.

Пример:

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

Двойные кавычки

Используйте двойные кавычки в PHP, чтобы избежать необходимости использовать точку для разделения кода (Примечание: Используйте фигурные скобки {} для включения переменных, если вы не хотите использовать оператор конкатенации (.)) в строка.

Пример:

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

Есть ли преимущество в производительности одинарной кавычки по сравнению с двойной кавычкой в PHP?

Да. Немного быстрее использовать одинарные кавычки.

PHP не будет использовать дополнительную обработку для интерпретации того, что находится внутри одинарной кавычки. когда вы используете двойные кавычки, PHP должен анализировать, чтобы проверить, есть ли там какие-либо переменные.

 37
Author: Janak Kanani, 2015-04-11 12:26:28

Строка в одинарных кавычках не содержит интерпретируемых переменных внутри нее. Строка в двойных кавычках делает это.

Кроме того, строка в двойных кавычках может содержать апострофы без обратных косых черт, в то время как строка в одинарных кавычках может содержать неэкранированные кавычки.

Строки в одинарных кавычках быстрее во время выполнения, потому что их не нужно анализировать.

 34
Author: Borealid, 2010-08-10 05:15:17

В PHP и 'my name', и "my name" являются строками. Вы можете прочитать больше об этом в руководстве по PHP.

Что вам следует знать, так это

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

В PHP люди используют одинарную кавычку для определения постоянной строки, например 'a', 'my name', 'abc xyz', при использовании двойной кавычки для определения строки, содержащей идентификатор, такой как "a $b $c $d".

И другое дело,

echo 'my name';

Быстрее, чем

echo "my name";

Но

echo 'my ' . $a;

Медленнее, чем

echo "my $a";

Это правда для других используемых строк.

 23
Author: Bang Dao, 2015-04-11 12:24:45

Пример одинарных, двойных, heredoc и 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
Author: Rabindra Nath, 2018-03-11 14:36:44

Оба вида вложенных символов являются строками. Один тип цитаты удобно использовать для включения другого типа цитаты. "'" и '"'. Самое большое различие между типами кавычек заключается в том, что ссылки на вложенные идентификаторы заменяются внутри двойных кавычек, но не внутри одинарных кавычек.

 11
Author: wallyk, 2010-08-10 05:15:35

В PHP текст в одинарных кавычках рассматривается как строковое значение, а текст в двойных кавычках будет анализировать переменные путем замены и обработки их значения.

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

Здесь значение анализируется в двойных кавычках, а одинарная кавычка рассматривается как строковое значение (без анализа переменной $test.)

 11
Author: Maulik Bhojani, 2014-09-04 20:58:43

Может быть, я немного опоздал и немного не по теме, но в любом случае это здесь...

Вам не нужно выбирать из-за содержимого вашей строки между:
alert("It's \"game\" time."); или alert('It\'s "game" time.');

Вместо этого вы можете ввести вот так, а затем использовать двойные или одинарные кавычки, потому что это не будет иметь значения:
alert("It’s “game” time."); и alert('It’s “game” time.');

 0
Author: 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
Author: Mahadeva Prasad, 2018-04-09 13:18:40

Одна вещь:

Очень важно отметить, что строка с закрывающим идентификатором Heredoc не должна содержать других символов, кроме точки с запятой (;). Это означает, в частности, что идентификатор не может быть с отступом, и не может быть никаких пробелов или вкладок до или после точки с запятой.

Пример:

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