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

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

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

10 ответов

Решение

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

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

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

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

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

Сингл цитируется

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

Пример:

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 должен анализировать, чтобы проверить, есть ли там какие-либо переменные.

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

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

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

В 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";

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

Пример одинарных, двойных, 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;

?>

В 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.)

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

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

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

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

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

$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

Вот некоторые возможности одинарных и двойных кавычек с переменной

$world = "world";

"Hello '.$world.' ";

'hello ".$world."';

Одна вещь:

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

Пример:

   $str = <<<EOD
Example of string
spanning multiple lines
using heredoc syntax.
EOD;
Другие вопросы по тегам