В чем разница между одинарными и двойными кавычками в PHP? - PullRequest
742 голосов
/ 10 августа 2010

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

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

Ответы [ 10 ]

1018 голосов
/ 10 августа 2010

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). Кроме того, на этой странице эталонных тестов есть сравнение с одинарной или двойной кавычкой. Большинство сравнений одинаковы. Есть одно сравнение, где двойные кавычки медленнее, чем одинарные.

193 голосов
/ 10 августа 2010

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

$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.
47 голосов
/ 12 апреля 2014

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

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

Пример:

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

36 голосов
/ 10 августа 2010

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

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

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

24 голосов
/ 10 августа 2010

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

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

16 голосов
/ 02 марта 2017

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

?>
12 голосов
/ 06 февраля 2014

В 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 голосов
/ 10 августа 2010

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

0 голосов
/ 09 апреля 2018

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

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

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

0 голосов
/ 03 января 2017

Одна вещь:

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

   $str = <<<EOD
Example of string
spanning multiple lines
using heredoc syntax.
EOD;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...