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

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

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

11 ответов


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

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


$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

одно:

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

пример:

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