I've noticed in a lot of people's classes that they prepend variables with an underscore and use custom getters and setters.

Why is this? Is it for performance reasons? How/why is a custom getter better then getting a variable normally?