I want to get the first letter of a string and I\'ve noticed that $str[0] works great. I am just not sure whether this is \'good practice\', as that notation is         
        
Speaking as a mere mortal, I would stick with $str[0].  As far as I'm concerned, it's quicker to grasp the meaning of $str[0] at a glance than substr($str, 0, 1).  This probably boils down to a matter of preference.
As far as performance goes, well, profile profile profile. :) Or you could peer into the PHP source code...