PHP-문자열에 변수를 연결하거나 직접 삽입


224

PHP 변수를 문자열에 삽입하는 올바른 방법은 무엇입니까?

이 방법:

echo "Welcome ".$name."!"

또는이 방법 :

echo "Welcome $name!"

이 두 가지 방법 모두 내에서 작동 PHP v5.3.5합니다. 후자는 더 짧고 간단하지만 첫 번째 형식이 더 나은지 또는 더 적합한 것으로 잘 모르겠습니다.


18
당신이 첫 번째를하고 있다면, 나는 개인적으로 작은 따옴표를 선호합니다echo 'Welcome '.$name.'!';
KJYe. 이름 葉家仁


2
@ kjy112 나는 내 대답에서 같은 것을 말했다, 나는 작은 따옴표의 거대한 팬이다 : X
Khez

11
개인적으로, 나는 전체 "한 따옴표가 더 효율적입니다"를 무시하고 "마지막 인용을 필요로하는 인용 스타일을 사용하십시오". 작성하는 코드가 문자열 구문 분석이 적고 문자열 연결이 증가하여 MICROSCOPIC의 이점을 얻을 가능성이 거의 없습니다.
Marc B

1
성능 손실 주장이 거짓입니다. 이 기사를 참조하십시오 : nikic.github.io/2012/01/09/…
Damian

답변:


344

이 두 구문 사이에서 실제로 원하는 것을 선택해야합니다 :-)

개인적으로, 나는 그런 경우 (가변 보간) 두 번째 솔루션을 사용하여 작성하고 읽기가 더 쉽습니다.

결과는 같습니다. 그리고 성능에 영향을 미치더라도 1 은 중요하지 않습니다 .


참고로, 내 대답은 조금 더 완전합니다. 다음과 같이하고 싶은 날 :

echo "Welcome $names!";

PHP는 $names존재하지 않는 변수 를 사용하려고하는 것처럼 코드를 해석 합니다. -문자열에 ""not ''을 사용하는 경우에만 작동합니다.

그 날에는 다음을 사용해야합니다 {}.

echo "Welcome {$name}s!"

연결로 대체 할 필요가 없습니다.


또한 첫 번째 구문은 다음과 같습니다.

echo "Welcome ".$name."!";

다음을 사용하여 연결을 피하면서 최적화 할 수 있습니다 .

echo "Welcome ", $name, "!";

(그러나 앞서 말했듯이 이것은별로 중요하지 않습니다 ...)


1-수십만 개의 연결 대 보간을 수행하지 않는 한 아마도 그렇지 않습니다.


3
훌륭 해요, 고맙습니다! 문자열에 직접 삽입하는 가장 좋아하는 방법을 사용할 수 있다는 것을 알고 매우 기쁩니다.이를 사용하는 경우 변수를 나머지 찌르기와 분리하는 방법을 아는 것에 대해 매우 감사합니다 {}.
Web_Designer

64
문자열 리터럴과 변수를 쉼표로 구분 echo하면 다른 곳이 아닌 에서만 작동 합니다.
colincameron 2012

3
성능을 지적하면 : time php -r '$string=""; for ($i=0;$i<199999;$i++){ $string = $string.$i; } print("Done!\n");'(연결)은 실제로 약 300 밀리 초 잃습니다 (200.000 항목의 경우 세트의 천 요소 당 1 miliseconf입니다 ...). 그것은 통계적인 소음이고, 어떤 차이도 측정하는 것은 불가능합니다. 더 읽기 쉽다는 점을 고려하면 time php -r '$string=""; for ($i=0;$i<199999;$i++){ $string = "{$string}{$i}"; } print("Done!\n");'(보간)은 확실한 승자입니다.
Fernando Cordeiro

1
보간을 사용하려면 큰 따옴표를 사용해야합니다.
Máxima Alekz

문자열 내부에서 함수를 사용할 수 있습니까? echo "이것은 {foo ()} nice"입니다. ?
strix25

17

큰 따옴표로 묶인 문자열은 변수를 삽입해야 할 때마다 작은 따옴표로 묶어야 할 때마다 문자열을 분리 할 필요가 없기 때문에 더 우아합니다.

그러나 함수의 반환 값을 삽입해야하는 경우 괄호로 묶어도 큰 따옴표로 묶인 문자열에 삽입 할 수 없습니다!

//syntax error!!
//$s = "Hello {trim($world)}!"

//the only option
$s = "Hello " . trim($world) . "!";

10
PHP 5.3 변수 함수를 통해 함수를 반 간접적으로 문자열에 삽입 할 수 있습니다. $x = function() { ...}; $string = "hello {$x(blah blah blah)}""제한"을 해결합니다.
Marc B

5
@Marc 멋지다, 나는 몰랐다! 기존 함수의 이름을 변수에 할당하고 동일한 작업을 수행 할 수도 있습니다.$x = 'trim'; $string = "hello {$x('blah blah blah')}";
Michael

3
그것은 시원하지만 매우 읽을 수 없으므로 어쨌든 피해야합니다.
당신의 상식

2
$s = 'Hello ' . trim($world) .'!';문자열에 보간 할 것이 없으면 작은 따옴표를 사용하십시오. 성능을 향상시키고 두 가지를 모두 식별하는 규칙으로 사용할 수 있습니다
Sarath Sadasivan Pillai

9

php4부터 문자열 포매터를 사용할 수 있습니다 :

$num = 5;
$word = 'banana';
$format = 'can you say %d times the word %s';
echo sprintf($format, $num, $word);

출처 : sprintf ()


지금까지 가장 안전한 옵션입니다. 다른 언어와 일치하는 모범 사례 및 일반 규칙 +1
Javier Arias


5

결정의 관점에서 생각하는 간단한 , 읽기 , 일관 하고 쉽게 이해하기 (성능이 여기에 문제가되지 않기 때문에)

  • 큰 따옴표로 묶인 내장 변수를 사용하면 객체 속성, 다차원 배열 등을 내장하려는 경우 복잡하고 혼란스러운 상황이 발생할 수 있습니다. 즉, 일반적으로 내장 변수를 읽을 때 읽고있는 내용의 최종 동작을 100 % 확실하게 확인할 수는 없습니다. .

  • {}and와 같은 목발을 추가해야하는 경우가 종종 있습니다. \IMO는 혼동을 유발하고 연결 가독성을 거의 동일하게 유지합니다.

  • 예를 들어 var 주위에 함수 호출을 래핑 해야하는 즉시 htmlspecialchars($var)연결로 전환해야합니다.

  • AFAIK, 상수를 포함 할 수 없습니다.

특정 경우에는 "vars가 포함 된 큰 따옴표"가 유용 할 수 있지만 일반적으로 말하면 연결을 위해 사용합니다 (편리한 경우 작은 따옴표 또는 큰 따옴표 사용).


5

나는이 질문에 이미 선택된 대답이 있다는 것을 알고 있지만 문자열 보간이 연결보다 빠르게 작동한다는 것을 분명히 보여주는 이 기사 를 발견 했습니다 . 여전히 의심스러운 사람들에게 도움이 될 수 있습니다.


3

첫 번째로 가서 작은 따옴표를 사용하십시오!

  1. 읽기 쉬워 다른 프로그래머가 무슨 일이 일어나고 있는지 알 수 있습니다.
  2. PHP가 소스 코드를 분석 할 때 opcode가 생성되는 방식이 약간 더 빠릅니다. 기본적으로 어쨌든 그렇게 할 것이므로 도움이됩니다!
  3. 큰 따옴표 대신 작은 따옴표를 사용하면 성능이 훨씬 향상됩니다.

당신이 필요로 할 때 따옴표를 사용해야합니다 유일한 상황이다 \r, \n, \t! 다른 경우에는 오버 헤드를 사용할 가치가 없습니다.

또한 PHP 변수 연결 , phpbench.com 에서 여러 가지 작업 방법에 대한 벤치 마크를 확인해야합니다 .


19
-1 : 작은 따옴표를 사용해도 성능에 실제로 영향을 미치지 않습니다. 에서 두 방법 링크 된 페이지 프로그램 차이 마이크로 초 , 즉 0.000001 초. 모든 데이터베이스 쿼리는 그 시간이 수백 시간이 걸립니다. 이 논쟁은 전적으로 무의미합니다.
Pekka

언급에 지점 좋은 \r, \n그리고 \t다른 답변이 비트를 포함하지 않았다.
evilReiko

2

맛만 중요합니다.
원하는 것을 사용하십시오.

대부분의 경우 두 번째 것을 사용하고 있지만 다릅니다.

문자열 내부의 변수를 강조 표시하는 훌륭한 편집기를 스스로에게 제안 해 드리겠습니다.


필요한 텍스트 영역이 있습니다. PSPad 바위.
Web_Designer

2

연결하지 마십시오. 필요하지 않습니다. echo는 여러 매개 변수를 사용할 수 있으므로 쉼표

echo "Welcome ", $name, "!";

작은 따옴표 나 큰 따옴표를 사용하는 것과 관련하여 차이는 무시할 만합니다. 많은 문자열로 테스트하여 직접 테스트 할 수 있습니다.


6
그러나 에코에만 적용됩니다. 변수 할당을 시도하고 코드가 폭발하는 것을보십시오.
Marc B

1

첫 번째를 선택해야합니다. 첫 번째 성능은 두 번째 성능을 비교할 때 빠를 것입니다.

큰 따옴표 PHP 내의 변수가 변수를 구문 분석하는 데 시간이 걸리는 경우.

변수 연결에 대한작은 따옴표 또는 큰 따옴표를 확인 하시겠습니까?

이것은 또 다른 예 입니다 PHP에서 작은 따옴표와 큰 따옴표의 성능 이점이 있습니까?

위의 링크 에서이 답변이 왜 표명되는지, 왜이 답변이 공표되었는지 이해하지 못했습니다.

내가 말한대로.

여기서도 볼 수 있습니다

PHP, 작은 따옴표 또는 큰 따옴표에서 더 빠른 것은 무엇입니까?


5
조기 최적화의 경우 -1입니다. 한 스크립트에서 수백만 번 인쇄하지 않는 한 성능의 차이만으로는 충분하지 않습니다. 그럼에도 불구하고 다른 처리를 수행하면 다른 방법 대신 한 가지 방법으로 인쇄하는 데 몇 초가 소요될 수 있습니다. . 그들 사이의 주요 차이점은 가독성입니다 (두 번째 스타일을 선호하게 만듭니다).
cHao

1
나는 당신의 마지막 질문에 대답하려고 노력할 수 있습니다. PHP 커뮤니티에는 많은 소문이 있으며 그중 일부는 매우 강력합니다. 공개하는 데 큰 어려움이 있으며 시간이 걸립니다. 그러나 천천히 변화하고 있습니다. 그래서, 당신이 연결 한 대답은 사람들이 관심을 갖지 않은 때부터 오래된 것입니다. 이 기사에서 일부 사람들은 읽은 기사가 아니라 자신의 경험을 바탕으로 대답했습니다.
당신의 상식

성능 손실이 거짓 +1 @cHao입니다. 다음은 메트릭을 증명하는 기사입니다. nikic.github.io/2012/01/09/…
Damian

1

SQL명령 을 실행하고 변수가 배열 멤버 인 경우 []배열 내부 에 작은 따옴표를 사용하지 않아야합니다 (예 :) ['']; 예를 들어이 문자열을 SQL 명령으로 사용하면 다음과 같은 결과가 나타납니다 server error 500.

$con = mysqli_connect('ServerName', 'dbUsername', 'dbPassword');
mysqli_select_db($con, 'dbName')

//'ID' is auto increment field.
$sql = "INSERT INTO sampleTable (ID, TraceNo) VALUES ('','$sampleArray['TraceNo']')";
mysqli_query($con, $sql)

올바른 문자열은 다음과 같습니다.

//'ID' is auto increment field.
$sql = "INSERT INTO sampleTable (ID, TraceNo) VALUES ('','$sampleArray[TraceNo]')";

대신 PDO를 사용해야합니다
s3c

0

나는 이것이 오래된 질문이라는 것을 알고 있지만 누군가가 모든 장단점을 언급해야한다고 생각합니다.

더 나은 구문 : 개인 취향입니다.

성능 : 차이가 없습니다. 많은 사람들이 언급했듯이, 비현실적으로 많은 변수를 사용하면 큰 따옴표가 더 빠를 수 있습니다.

더 나은 사용법 : 작은 따옴표 (주로). @Khez가 말했듯이 작은 따옴표로 함수 호출 및 변수 수정과 같은 것을 연결할 수 있습니다 echo 'hi ' . trim($name) . ($i + 1);. 큰 따옴표로 할 수있는 유일한 작은 따옴표는 \n, \r등의 사용법입니다 \t.

가독성 : 차이가 없습니다 (개인 취향이 적용될 수 있음).

쓰기 가능 / 다시 쓰기 가능 / 디버깅 : 한 줄짜리 문장에는 차이가 없지만 여러 줄을 다룰 때 디버깅하거나 쓰는 동안 줄을 주석 처리하거나 주석 처리를 제거하는 것이 더 쉽습니다. 예를 들면 다음과 같습니다.

$q = 'SELECT ' .
     't1.col1 ' .
     ',t2.col2 ' .
   //',t3.col3 ' .
     'FROM tbl1 AS t1 ' .
     'LEFT JOIN tbl2 AS t2 ON t2.col2 = t1.col1 ' .
   //'LEFT JOIN tbl3 AS t3 ON t3.col3 = t2.col2 ' .
     'WHERE t1.col1 = ' . $x . ' ' .
     '  AND t2.col2 = ' . $y . ' ' .
   //'  AND t3.col3 = ' . $z . ' ' .
     'ORDER BY t1.col1 ASC ' .
     'LIMIT 10';

덜 탈출 : 작은 따옴표. 작은 따옴표의 경우 2 자만 이스케이프해야합니다 ( '\). 큰 따옴표의 경우 2 자 ( ", \) 를 이스케이프 하고 필요한 경우 3 자 이상 을 이스케이프해야 합니다 ( $, {}).

적은 변경 : 작은 따옴표. 예를 들어 다음 코드가있는 경우

echo 'Number ' . $i . '!';

그리고 1에서 $ i까지 증가시켜야하므로 좋아합니다.

echo 'Number ' . ($i + 1) . '!';

그러나 큰 따옴표의 경우 다음을 변경해야합니다.

echo "Number $i!";

이에:

echo "Number " . ($i + 1) . "!";

결론 : 원하는 것을 사용하십시오 .

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