Thanks for your basic tutorial. It works for me because I've experience with OOP, and PHP, and using objects on PHP, but none defining them.

One suggestion is about your exemple of bad practices and corrections. You are using "getUserById" and I think a better name would be "load($id)" or to have a constructor which receives the userId as parameter. "getUserById" sounds like a "getter method" and you return nothing but true.