Well I learned 'the hard way'.
Basicly I picked up vBulletin way back 2000 (maybe 1999 who knows...) and installed a few hacks around here. Eventally I started making small modifications to these hacks and would break them and have to fix them.
With much trail and error I learned most of php via this community by hacking my own forum or links dropped in posts in this community. The code is all around you, take them time to read some of it.
Books are good to of course, you just have to take the time to write working code as you learn.