Re: Watch out for automatic type casting

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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.


--

--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php



[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux