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

708

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

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

Теги:
string
syntax

12 ответов

975
Лучший ответ

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

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

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

  • 10
    +1 за фигурную скобку. Не знал об этом. Жаль, что он не следует тем же соглашениям, что и сценарии оболочки, то есть ${variablename} .
  • 3
    Я использую только двойные кавычки, когда мне это нужно для \n , все остальное в моем коде PHP находится в одинарных кавычках.
Показать ещё 5 комментариев
185

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

$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.
  • 1
    Экранированные одинарные кавычки и экранированные обратные слэши расширяются даже в одиночных кавычках.
  • 34
    Ошибка, с которой работают многие разработчики, $mailbody = 'I want a line break:\nDone.'; с PHP: $mailbody = 'I want a line break:\nDone.'; поддерживает \n живых. Принимая во внимание, что: $mailbody = "I want a line break:\nDone."; будет разбирать разрыв строки.
Показать ещё 1 комментарий
42

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

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

Пример:

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

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

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

Пример:

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

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

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

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

  • 0
    Единственное исключение одинарные кавычки НЕ разбора ничего в строке, является то , что вы можете использовать \' чтобы избежать одного апострофа для использования в строке (или \\' для отображения обратной косой черты). Обратите внимание, что традиционные escape-последовательности, такие как \n , НЕ будут анализироваться с символом перевода строки. PHP документы на строки
34

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

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

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

  • 8
    Строки в одинарных кавычках также используют меньше памяти. Самый быстрый способ обработки строк в PHP - использовать одинарные кавычки и использовать. оператор для объединения строк и переменных.
  • 0
    хм, поправьте меня, если я ошибаюсь, но базовый язык для PHP - C, верно? Тогда почему строковые кавычки отличаются в PHP и C?
Показать ещё 3 комментария
24

В 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

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

?>
11

В 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

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

0

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

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

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

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

Одна вещь:

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

Пример:

   $str = <<<EOD
Example of string
spanning multiple lines
using heredoc syntax.
EOD;
  • 1
    Это верное утверждение, но оно не имеет ничего общего с вопросом здесь.
-3

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

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

для получения дополнительной информации см. http://phptutorial.co.in/php-echo-print/ p >

Ещё вопросы

Сообщество Overcoder
Наверх
Меню