Hi, Arno FYI: I found a page in the php-manual that's exactly for that: http://www.php.net/manual/en/language.operators.precedence.php p.s. some of them were also new to me .... Thanks for getting me to read it. Bye Simon 2012/3/29 Simon Schick <simonsimcity@xxxxxxxxxxxxxx>: > 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