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