Hi, Arno I don't know if this is written somewhere in the php-manual, but I really like this table: http://en.wikipedia.org/wiki/Order_of_operations#Programming_languages I do not really understand why this has some special stuff to do with typecasting ... This is just an order like the operators + and * in math. If you'd ask me, this is exactly what I would expect to happen. Bye Simon 2012/3/29 Arno Kuhl <arno@xxxxxxxxxxxxxx>: > 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 > -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php