Re: Watch out for automatic type casting

From: 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.
--

« previous php.general (#317481) next »