Compared to auto-generating, using Autoload is
- Slower, because the inheritance hierarchy will be searched before getting to AUTOLOAD
- Trickier - did you remember to handle DESTROY? Did you handle disallowed methods?
But a more important question to consider is - Should I be using getters and setters?
The short answer is "most likely not", but for more depth see BrowserUk's answer:Re: OOP's setter/getter method - is there a way to avoid them?
Another good read is
Why getter and setter methods are evil. Some relevant quotes are:
A fundamental precept of OO systems is that an object should not expose any of its implementation details. This way, you can change the implementation without changing the code that uses the object. It follows then that in OO systems you should avoid getter and setter functions since they mostly provide access to implementation details.
and
This implementation hiding principle leads to a good acid test of an OO system's quality: Can you make massive changes to a class definition—even throw out the whole thing and replace it with a completely different implementation—without impacting any of the code that uses that class's objects? This sort of modularization is the central premise of object orientation and makes maintenance much easier. Without implementation hiding, there's little point in using other OO features.