PHP에서 작은 따옴표와 큰 따옴표로 묶은 문자열의 차이점은 무엇입니까?


796

작은 따옴표로 묶인 문자열이 있고 때로는 큰 따옴표로 묶인 PHP의 일부 코드를 보는 이유가 약간 혼란 스럽습니다.

.NET 또는 C 언어로 작은 따옴표로 묶인 경우 문자열이 아니라 문자임을 알 수 있습니다.

답변:


1086

PHP 문자열 가지 방법뿐만 아니라 가지방법으로 지정할 수 있습니다.

  1. 작은 따옴표로 묶인 문자열 은 거의 "있는 그대로"표시합니다. 변수와 대부분의 이스케이프 시퀀스는 해석되지 않습니다. 리터럴 작은 따옴표를 표시하려면 백 슬래시로 이스케이프 처리하고 백 슬래시\'를 표시하려면 다른 백 슬래시로 이스케이프 처리 할 수 ​​있습니다\\( 예, 작은 따옴표로 묶인 문자열도 구문 분석 됨 ).
  2. 큰 따옴표 문자열 에는 이스케이프 된 문자 (일부 정규식 포함)가 표시되고 문자열의 변수가 평가됩니다. 여기서 중요한 점은 중괄호를 사용하여 평가할 변수의 이름을 분리 할 수 있다는 입니다. 예를 들어 변수가$type있고하고 싶다고가정 해 봅시다echo "The $types are". 변수를 찾습니다$types. 이 문제를 해결하려면echo "The {$type}s are"달러 부호 앞뒤에 왼쪽 괄호를 넣을 수 있습니다. 한 번 봐 가지고 분석 문자열을 배열 변수 등을 사용하는 방법을 참조하십시오.
  3. Heredoc 문자열 구문은 큰 따옴표로 묶인 문자열처럼 작동합니다. 로 시작합니다<<<. 이 연산자 뒤에 식별자가 제공되고 줄 바꿈이 제공됩니다. 문자열 자체가 뒤 따르고 동일한 식별자가 다시 인용 부호를 닫습니다. 이 구문에서 따옴표를 이스케이프 할 필요는 없습니다.
  4. Nowdoc (PHP 5.3.0부터) 문자열 구문은 작은 따옴표로 묶인 문자열과 본질적으로 작동합니다. 차이점은 작은 따옴표 나 백 슬래시도 이스케이프 할 필요가 없다는 것입니다. nowdoc은<<<heredocs와 동일한순서로 식별되지만 다음에 오는 식별자는 작은 따옴표로 묶습니다 (예:)<<<'EOT'. nowdoc에서는 구문 분석이 수행되지 않습니다.

참고 : 작은 따옴표 안의 작은 따옴표와 큰 따옴표 안의 큰 따옴표는 이스케이프되어야합니다.

$string = 'He said "What\'s up?"';
$string = "He said \"What's up?\"";

속도 :
작은 따옴표보다 큰 따옴표보다 빠르지 않습니다. 특정 상황에서는 더 빠를 것입니다. 다음 은 PHP 4.3부터 작은 따옴표와 큰 따옴표가 본질적으로 똑같이 빠르는 한 가지 방법을 설명 하는 기사입니다 ( Useless Optimizations하단, 섹션 C). 또한이 벤치 마크 페이지 에는 작은 따옴표와 큰 따옴표가 있습니다. 대부분의 비교는 동일합니다. 큰 따옴표가 작은 따옴표보다 느린 비교가 있습니다.


17
중괄호 트릭의 경우 +1 그것을 몰랐다. 쉘 스크립트와 같은 규칙을 따르지 않는 것이 너무 나쁩니다 ${variablename}.
devios1

6
큰 따옴표 만 사용해야합니다. 필요한 경우 코드의 \n다른 부분 PHP은 작은 따옴표입니다.
Jo Smo

'heredoc'이 bash에서 PHP로 포팅 된 것입니까? 어쨌든 훌륭한 답변이므로 +1 감사합니다.
sjsam

2
PHP 문서 주석의 흥미로운 참고 사항 : php.net/manual/en/language.types.string.php#120160- "큰 따옴표로 묶인 문자열은 \ n 백 슬래시와 $ dollar에 대한 모든 것을 파싱해야하기 때문에 $ slow처럼 보입니다. 변수 확장을위한 징후 ", PHP에서 가장 빠른 문자열 연결 방법으로 밝혀졌습니다-PERIOD! 작은 따옴표는 문자열이 완전히 리터럴 인 경우 (구문 분석 할 것이없고 연결할 것이없는 경우)에만 더 빠르지 만 마진은 아주 작고 중요하지 않습니다. "
dregad

1
참고 : "큰 따옴표의 속도 저하 는 과거의 일이 아닙니다. 요즘에는 극단적 인 경우를 제외하고는 큰 따옴표 처리 속도가 빨라졌습니다.
SherylHohman

211

상황은 큰 따옴표로 평가되지만 작은 따옴표로 평가되지는 않습니다.

$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
이스케이프 된 작은 따옴표와 이스케이프 된 백 슬래시는 작은 따옴표로 묶인 문자열에서도 확장됩니다.
Peter Ajtai 5

43
PHP를 처음 접하는 많은 개발자들이 겪고있는 실수 $mailbody = 'I want a line break:\nDone.';\n살아남는 것입니다. 반면 : $mailbody = "I want a line break:\nDone.";줄 바꿈을 구문 분석합니다.
Kai Noack

내 2 센트는 인터뷰 나 맬웨어 개발에만 필요합니다. 두 표현식에서 var_dump ()를 비교해보십시오.의 $testWithAsciiAndUtf8Characters = "\x48\x41\x4c\114\117 \u{0147}\u{012B}\u{0144}\u{014D}!"; $simpleTest = '\x48\x41\x4c\114\117 \u{0147}\u{012B}\u{0144}\u{014D}!'; 문자 시퀀스 $testWithAsciiAndUtf8Characters가 실제 문자가 포함 된 문자열로 변환되었습니다.
Rostyslav Pylypenko

56

' 작은 따옴표

문자열을 지정하는 가장 간단한 방법은 작은 따옴표로 묶는 것입니다. 작은 따옴표는 일반적으로 더 빠르며 인용 된 모든 것은 일반 문자열로 처리됩니다.

예:

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는 문자열 내에 변수가 있는지 확인하기 위해 구문 분석해야합니다.


문자열 내에서 아무것도 구문 분석하지 않는 작은 따옴표 의 한 가지 예외는 문자열 내에서 사용 \'하기 위해 단일 아포스트로피를 이스케이프 처리하거나 \\'백 슬래시를 표시하는 데 사용할 수있는 것 입니다. \n개행 문자로 구문 분석되지 않는 것과 같은 기존의 이스케이프 시퀀스는 유의하십시오 . 문자열에 PHP 워드 프로세서
SherylHohman

나는 모든 대답에서 볼 수 있습니다 : 큰 따옴표 안에 변수 이름을 사용하여 변수 값을 인쇄 할 수는 있지만 변수 이름은 중괄호로 묶어야 연결을 사용할 필요가 없습니다. 기간. "$ my_var"와 "{$ my_var}"가 $ my_var의 값을 출력하면 중괄호는 무엇입니까? 감사!
Bahman. A

40

작은 따옴표로 묶인 문자열에는 해석 된 변수가 없습니다. 큰 따옴표로 묶인 문자열이 않습니다.

또한 큰 따옴표로 묶인 문자열에는 백 슬래시가없는 아포스트로피가 포함될 수 있고 작은 따옴표로 묶인 문자열에는 이스케이프되지 않은 따옴표가 포함될 수 있습니다.

작은 따옴표로 묶인 문자열은 구문 분석 할 필요가 없으므로 런타임에 더 빠릅니다.


8
작은 따옴표로 묶인 문자열도 적은 메모리를 사용합니다. PHP에서 문자열을 처리하는 가장 빠른 방법은 작은 따옴표를 사용하고을 사용하는 것입니다. 문자열과 변수를 연결하는 연산자.
RibaldEddie 5

흠, 내가 틀렸다면 수정하지만 PHP의 기본 언어는 C입니까? 그렇다면 왜 PHP와 C에서 문자열 따옴표가 다른가?
rob waminal 5

1
@rob waminal : PHP는 C로 구현 될 수 있지만 다른 언어입니다. PHP 언어는 이러한 의미를 지정합니다.
Borealid

@Ribald-이제 문법을 더 빨리 쓰지 않겠습니까? 작은 따옴표로 묶인 문자열은 이스케이프 된 작은 따옴표와 백 슬래시로 구문 분석됩니다.
Peter Ajtai

@ 피터, 당신은 정확 할 수 있습니다, 나는 정말로 그것에 파고 귀찮게하지 않았습니다. PHP 문서는 속도를 높이기 위해 문서를 믿기로 결정했습니다. :)
RibaldEddie

27

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

다른 문자열을 사용하는 경우에도 마찬가지입니다.


18

단일, 이중, 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;

?>

16

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변수 를 구문 분석하지 않고 문자열 값으로 간주됩니다 .


12

두 종류의 동봉 된 문자는 문자열입니다. 한 가지 유형의 견적은 다른 유형의 견적을 묶는 데 편리하게 사용됩니다. "'" 그리고 '"'. 따옴표 유형의 가장 큰 차이점은 동봉 된 식별자 참조가 큰 따옴표 안에 있지만 작은 따옴표 안에는 사용되지 않는다는 것입니다.


3

PHP에서 작은 따옴표와 큰 따옴표를 사용하는 것의 차이점은 echo 문에 작은 따옴표를 사용하면 문자열로 취급된다는 것입니다. ...하지만 큰 따옴표 안에 변수 이름을 입력하면 문자열과 함께 해당 변수의 값이 출력됩니다.


0

변수가있는 작은 따옴표와 큰 따옴표의 가능성

$world = "world";

"Hello '.$world.' ";

'hello ".$world."';

-1

한가지 :

Heredoc 의 닫는 식별자가있는 행 은 세미콜론 (;)을 제외하고 다른 문자를 포함하지 않아야합니다 . 이는 특히 식별자가 들여 쓰기 되지 않을 수 있으며 세미콜론 앞뒤에 공백 이나 이 없을 수 있음을 의미합니다 .

예:

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

1
이것은 진정한 진술이지만 여기서 질문과는 아무런 관련이 없습니다.
miken32

-1

어쩌면 나는 조금 늦었고 주제가 조금 벗어 났지만 어쨌든 여기 있습니다.

당신은 반드시 때문에 사이에 문자열의 콘텐츠를 선택할 필요가 없습니다 :
alert("It's \"game\" time.");또는alert('It\'s "game" time.');

당신이 영어 인용 부호의 사용, 아포스트로피에 대한 올바른 문자에 익숙하다면, 당신도 이중 또는 단일 따옴표를 사용, 그것은하지 않기 때문에 문제가 더 이상 할 수
alert("It’s “game” time.");alert('It’s “game” time.');

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.