PHP 변수를 문자열에 삽입하는 올바른 방법은 무엇입니까?
이 방법:
echo "Welcome ".$name."!"
또는이 방법 :
echo "Welcome $name!"
이 두 가지 방법 모두 내에서 작동 PHP v5.3.5
합니다. 후자는 더 짧고 간단하지만 첫 번째 형식이 더 나은지 또는 더 적합한 것으로 잘 모르겠습니다.
PHP 변수를 문자열에 삽입하는 올바른 방법은 무엇입니까?
이 방법:
echo "Welcome ".$name."!"
또는이 방법 :
echo "Welcome $name!"
이 두 가지 방법 모두 내에서 작동 PHP v5.3.5
합니다. 후자는 더 짧고 간단하지만 첫 번째 형식이 더 나은지 또는 더 적합한 것으로 잘 모르겠습니다.
답변:
이 두 구문 사이에서 실제로 원하는 것을 선택해야합니다 :-)
개인적으로, 나는 그런 경우 (가변 보간) 두 번째 솔루션을 사용하여 작성하고 읽기가 더 쉽습니다.
결과는 같습니다. 그리고 성능에 영향을 미치더라도 1 은 중요하지 않습니다 .
참고로, 내 대답은 조금 더 완전합니다. 다음과 같이하고 싶은 날 :
echo "Welcome $names!";
PHP는 $names
존재하지 않는 변수 를 사용하려고하는 것처럼 코드를 해석 합니다. -문자열에 ""not ''을 사용하는 경우에만 작동합니다.
그 날에는 다음을 사용해야합니다 {}
.
echo "Welcome {$name}s!"
연결로 대체 할 필요가 없습니다.
또한 첫 번째 구문은 다음과 같습니다.
echo "Welcome ".$name."!";
다음을 사용하여 연결을 피하면서 최적화 할 수 있습니다 .
echo "Welcome ", $name, "!";
(그러나 앞서 말했듯이 이것은별로 중요하지 않습니다 ...)
1-수십만 개의 연결 대 보간을 수행하지 않는 한 아마도 그렇지 않습니다.
{}
.
echo
하면 다른 곳이 아닌 에서만 작동 합니다.
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");'
(보간)은 확실한 승자입니다.
큰 따옴표로 묶인 문자열은 변수를 삽입해야 할 때마다 작은 따옴표로 묶어야 할 때마다 문자열을 분리 할 필요가 없기 때문에 더 우아합니다.
그러나 함수의 반환 값을 삽입해야하는 경우 괄호로 묶어도 큰 따옴표로 묶인 문자열에 삽입 할 수 없습니다!
//syntax error!!
//$s = "Hello {trim($world)}!"
//the only option
$s = "Hello " . trim($world) . "!";
$x = function() { ...}; $string = "hello {$x(blah blah blah)}"
"제한"을 해결합니다.
$x = 'trim'; $string = "hello {$x('blah blah blah')}";
$s = 'Hello ' . trim($world) .'!';
문자열에 보간 할 것이 없으면 작은 따옴표를 사용하십시오. 성능을 향상시키고 두 가지를 모두 식별하는 규칙으로 사용할 수 있습니다
php4부터 문자열 포매터를 사용할 수 있습니다 :
$num = 5;
$word = 'banana';
$format = 'can you say %d times the word %s';
echo sprintf($format, $num, $word);
출처 : sprintf ()
어느 쪽이든 괜찮습니다. 더 잘 보이는 것을 사용하십시오. 가시성에 관해서도 printf를 확인할 수 있습니다 .
결정의 관점에서 생각하는 간단한 , 읽기 , 일관 하고 쉽게 이해하기 (성능이 여기에 문제가되지 않기 때문에)
큰 따옴표로 묶인 내장 변수를 사용하면 객체 속성, 다차원 배열 등을 내장하려는 경우 복잡하고 혼란스러운 상황이 발생할 수 있습니다. 즉, 일반적으로 내장 변수를 읽을 때 읽고있는 내용의 최종 동작을 100 % 확실하게 확인할 수는 없습니다. .
{}
and와 같은 목발을 추가해야하는 경우가 종종 있습니다. \
IMO는 혼동을 유발하고 연결 가독성을 거의 동일하게 유지합니다.
예를 들어 var 주위에 함수 호출을 래핑 해야하는 즉시 htmlspecialchars($var)
연결로 전환해야합니다.
AFAIK, 상수를 포함 할 수 없습니다.
특정 경우에는 "vars가 포함 된 큰 따옴표"가 유용 할 수 있지만 일반적으로 말하면 연결을 위해 사용합니다 (편리한 경우 작은 따옴표 또는 큰 따옴표 사용).
첫 번째로 가서 작은 따옴표를 사용하십시오!
당신이 필요로 할 때 따옴표를 사용해야합니다 유일한 상황이다 \r
, \n
, \t
! 다른 경우에는 오버 헤드를 사용할 가치가 없습니다.
또한 PHP 변수 연결 , phpbench.com 에서 여러 가지 작업 방법에 대한 벤치 마크를 확인해야합니다 .
\r
, \n
그리고 \t
다른 답변이 비트를 포함하지 않았다.
맛만 중요합니다.
원하는 것을 사용하십시오.
대부분의 경우 두 번째 것을 사용하고 있지만 다릅니다.
문자열 내부의 변수를 강조 표시하는 훌륭한 편집기를 스스로에게 제안 해 드리겠습니다.
첫 번째를 선택해야합니다. 첫 번째 성능은 두 번째 성능을 비교할 때 빠를 것입니다.
큰 따옴표 PHP 내의 변수가 변수를 구문 분석하는 데 시간이 걸리는 경우.
변수 연결에 대한 이 작은 따옴표 또는 큰 따옴표를 확인 하시겠습니까?
이것은 또 다른 예 입니다 PHP에서 작은 따옴표와 큰 따옴표의 성능 이점이 있습니까?
위의 링크 에서이 답변이 왜 표명되는지, 왜이 답변이 공표되었는지 이해하지 못했습니다.
내가 말한대로.
여기서도 볼 수 있습니다
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]')";
나는 이것이 오래된 질문이라는 것을 알고 있지만 누군가가 모든 장단점을 언급해야한다고 생각합니다.
더 나은 구문 : 개인 취향입니다.
성능 : 차이가 없습니다. 많은 사람들이 언급했듯이, 비현실적으로 많은 변수를 사용하면 큰 따옴표가 더 빠를 수 있습니다.
더 나은 사용법 : 작은 따옴표 (주로). @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) . "!";
결론 : 원하는 것을 사용하십시오 .
echo 'Welcome '.$name.'!';