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.
Then when $pos is later used as an int it's converted from TRUE to 1.
You have to bracket the $pos setting to move it into its own scope to
prevent it being typecast:
if ( ($pos = strpos($sText, "test")) !== FALSE) {
No doubt it's mentioned somewhere in the php manual, I just never came
across it.
Just thought I'd highlight one of the gotchas of auto typecasting for any
other simpletons like me.
Cheers
Arno