I thought string operators were for use with strings or strings and numbers. But that is incorrect. You can use the '.' operator to concatenate two numbers, as follows:
echo 1 . 2;
I assume that behind the scenes the 1 and 2 are converted to strings to allow the concatenation. What triggers the conversion? I'll guess the dot operator.
문자열 연산자
두개의 문자열 연산자가 지원된다. 첫번째것은 결합연산자 ('.')이고 좌측과 우측의 피연산자를 결합한 값을 돌려준다. 두번째것은 결합 지정 연산자('.=')이다. 이런 연산자는 좌측 인자로 우측 인자를 추가한다. 자세한 정보는 지정 연산자를 참고
$a = "Hello ";
$b = $a . "World!"; // now $b contains "Hello World!"
$a = "Hello ";
$a .= "World!"; // now $a contains "Hello World!"
String type, String functions에 관한 매뉴얼 섹션을 참고
문자열 연산자
mehea
19-May-2008 05:31
19-May-2008 05:31
kevin at metalaxe dot com
09-Nov-2006 06:57
09-Nov-2006 06:57
I ran the follow script and found that using "$var" was 'mostly' slower than using ' '.$var
<?php
$var = 1;
for( $x=0; $x < 101; $x++ )
{
echo '<br /><br />var = int( '.$var.' )<br />';
$timer->reset();
for( $i=0; $i<100001; $i++ )
{
$string = " {$var} {$var} {$var} {$var} {$var} {$var} {$var} {$var} {$var} {$var} {$var} {$var} {$var} {$var} {$var}";
unset( $string );
}
echo 'One string with 15 $vars was set using one concat 100000 times and took '.$timer->fetch_time().' seconds to execute <br />';
$timer->reset();
for( $i=0; $i<100001; $i++ )
{
$string = ' '.$var.' '.$var.' '.$var.' '.$var.' '.$var.' '.$var.' '.$var.' '.$var.' '.$var.' '.$var.' '.$var.' '.$var.' '.$var.' '.$var.' '.$var;
unset( $string );
}
echo 'One string with 15 instances of $var was set using multiple concats 100000 times and took '.$timer->fetch_time().' seconds to execute';
}
exit();
?>
Replacing $timer with a generic timing class of course.
caliban at darklock dot com
29-Mar-2006 11:10
29-Mar-2006 11:10
WRT Stephen's note:
My example of concatenation and array methods of string building does not include the interstitial logic, which is expected to include conditionals.
Concatenation method:
$str="This is my list";
if($list=="o") $str.="<ol>";
else $str.="<ul>";
foreach($item as $i) $str.="<li>$i</li>";
if($list=="o") $str.="</ol>";
else $str.="</ul>";
Array method:
$str=array("This is my list");
if($list=="o") $str[]="<ol>";
else $str[]="<ul>";
foreach($item as $i) $str[]="<li>$i</li>";
if($list=="o") $str[]="</ol>";
else $str[]="</ul>";
$str=implode("",$str);
You can't do either of these with a single double-quoted string. However, if what you are doing CAN be done in a single double-quoted string, Stephen is completely correct in observing that you should do that instead of concatenating.
Stephen Clay
23-Dec-2005 07:10
23-Dec-2005 07:10
<?php
"{$str1}{$str2}{$str3}"; // one concat = fast
$str1. $str2. $str3; // two concats = slow
?>
Use double quotes to concat more than two strings instead of multiple '.' operators. PHP is forced to re-concatenate with every '.' operator.
caliban at darklock dot com
15-Dec-2004 07:57
15-Dec-2004 07:57
String concatenation is faster than the array method:
$str="";
$str.="Some string";
$str.="Some other string";
...
$str.="The last string";
That runs roughly twice as fast as:
$str=array();
$str[]="Some string";
$str[]="Some other string";
...
$str[]="The last string";
$str=implode("",$str);
Not that I think this is a terribly widespread practice, but I've got an awful lot of legacy code with this array method in it and a comment to the effect that it's faster than string concatenation. Testing has shown the exact opposite, so I figured I'd enlighten anyone else with this misconception.
anders dot benke at telia dot com
27-Apr-2004 09:53
27-Apr-2004 09:53
A word of caution - the dot operator has the same precedence as + and -, which can yield unexpected results.
Example:
<php
$var = 3;
echo "Result: " . $var + 3;
?>
The above will print out "3" instead of "Result: 6", since first the string "Result3" is created and this is then added to 3 yielding 3, non-empty non-numeric strings being converted to 0.
To print "Result: 6", use parantheses to alter precedence:
<php
$var = 3;
echo "Result: " . ($var + 3);
?>
