Classes and Controllers are different things.
Classes are an object orientated construct. Whether there's any advantages of using Object Orientation over procedural code is really a matter of opinion (and debate between programmers).
Personally, I think OO is the way to code, especially for mid sized projects upwards.
In my opinion its
- Easier to create reusable code
- Has a much greater deal of syntactic sugar(making it easier to understand by others)
- The ability to use various design patterns (Singleton, Adaptor, Factory etc. If you can use them in procedural code, then I'm sure it's not as simple as in oo)
- Maps to real world applications a lot easier
Obviously, this is all just my opinion. I find making a class for users in my website, for example, a really natural way of doing things, and by using constructors and such it just really makes coding that bit easier (in my opinion).
Controllers are to do with MVC Architecture (Model, View, Controller). The advantage of structuring your app like this is that you split it up into smaller, reusable segments which all have a specific job to do (rather than coding the same thing multiple times).
In essence, you have the Model, which is the part that does all your logic and data stuff. If you're fetching, writing or deleting something to/from a database, the chances are you'll be using a model to do it (or should be). The same with files, external APIs. This should do all the heavy lifting of your website.
The controller is the part that figures out what goes where. It determines which models need to be called, and calls them. It then determines which view needs to be called to display the data, and passes the data between. One controller can serve multiple views, and be served by multiple models. A controller can also be responsible for stuff like parsing scripting languages in views (so people writing skins for your application don't need to know PHP - think vBulletin or something similar).
The view is the part that the user sees. It can be a webpage (and usually is), but also a PDF document, an RSS feed, or anything else you can think of. Typically data is passed from the controller into the View, which renders and displays the content to the user. Each segment of the view should only be coded once (so you'll be including the header, footer, etc), and you might want to implement a scripting language to deal with the view if somebody with no coding knowledge is making skins for you. The scripting language would be parsed in the controller, as aforementioned.