#19883 [Bgs]: string concatenation bug
| From: | sander@php.net | Date: | Sun, 13 Oct 2002 17:09:03 +0000 |
| Subject: | #19883 [Bgs]: string concatenation bug | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-22307@lists.php.net to get a copy of this message | ||
ID: 19883
Updated by: sander@php.net
Reported By: skaventruc@yahoo.fr
Status: Bogus
Bug Type: Strings related
Operating System: Windows NT
PHP Version: 4.2.0
New Comment:
THIS IS NOT A BUG!
Read the docs about operator precedence
(http://www.php.net/manual/en/language.operators.php#language.operators.precedence).
To avoid problems like these use parentheses ():
echo 'c='.($a*2).' ok';
Previous Comments:
------------------------------------------------------------------------
[2002-10-13 12:03:06] skaventruc@yahoo.fr
Yes, of course,
I was only thinking that the advantage of PHP over C
was that we can concatenate easily strings with
expressions and functions results when setting variable,
calling functions ...
this syntax allow to do :
something('a='.$a.' and f(a)*2 = '.f($a)*2.' ...');
instead of :
$str = 'a=';
$str .= $a;
$str .= ' and f(a)*2 = ';
$str .= f($a)*2;
$str .= ' ...';
something($str);
or :
$str = sprintf('a=%d and f(a)*2 = %d ...', $a, f($a)*2);
something($str);
I really think that if you allow this kind of concatenation
to avoid complex string composition, then the 'float'
problem is a bug, standard C does not allow dynamic
string concatenation but in C++ you can overload the '+'
operator and there is no confusion with the '.'
I know there is always a way to overcome the problem
in syntax, my report is only about something that
appear to me to be an error.
Julien.
------------------------------------------------------------------------
[2002-10-13 11:38:29] spic@php.net
In that case, simply use
$i = 153;
echo $i*2
echo 'km';
or printf()...
------------------------------------------------------------------------
[2002-10-13 11:16:05] skaventruc@yahoo.fr
and when you want to concatenate with dynamic
calculated infos ?
$i = 153;
echo $i*2.'km';
------------------------------------------------------------------------
[2002-10-13 09:47:57] derick@php.net
Why don't you just use '2km' instead of 2.'km' ?
Derick
------------------------------------------------------------------------
[2002-10-13 09:46:06] skaventruc@yahoo.fr
and also :
$e = 0x7C.'km'; // is ok '124km'
$e = 124.'km'; // parse error
why do you process decimal integers in different way
than hexadecimal integers ? If it is only to detect
decimal float then you should take care to the fact that
'.' is not only a decimal separator but also a concatenation
operator !!!
------------------------------------------------------------------------
The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
http://bugs.php.net/19883
--
Edit this bug report at http://bugs.php.net/?id=19883&edit=1