Re: Watch out for automatic type casting
| From: | Bogdan Ribic | Date: | Sat, 07 Apr 2012 14:37:32 +0000 |
| Subject: | Re: Watch out for automatic type casting | ||
| References: | 1 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-317481@lists.php.net to get a copy of this message | ||
This is *not* typecasting at all, this is assignment of a result of boolean operator, and it boils down to operator precedence.
It's equivalent to this code:
$b = $x == 11;
in the part that right side of equation sign is calculated first, then assigned to lvalue. In effect, you wrote this:
$pos = (strpos($sText, "test") !== FALSE);
You would often use something like this in code:
$isSame = $x == $y;
which would put a boolean into $isSame, not put value of $x and then compare it.
On 3/29/2012 18:57, Arno Kuhl wrote:
I found automatic typecasting can be a bit of a gotcha. $sText = "this.is.a.test.text"; if ( $pos = strpos($sText, "test") !== FALSE) {--echo substr($sText, 0, $pos)."<".substr($sText, $pos,strlen("test")).">".substr($sText, $pos+strlen("test")); } The code seems logical enough, and the expected result would be: this.is.a.<test>.text In fact it ends up being: t<his.>is.a.test.text The reason is $pos is typecast as TRUE, not int 10, presumably because it's in the same scope as the boolean test.