There's something strange indeed:
//echo $!calc($calc(5)) echoes $calc($calc(5))
//echo $!calc($calc(5) + $calc(5)) echoes $calc($calc(5) + 5
//echo $!calc($+($calc(5),$chr(32),+,$chr(32),$calc(5)) echoes $calc($+($calc(5),$chr(32),+,$chr(32),$calc(5))

Seems like a ! only stops parsing until the next space...