And that's the magic word that suits OOP perfectly: Modularity.
The main diff between the OOP approach and the 'functions and includefiles' approach is that an object can be built to contain it's own variables.
Once you set a var inside an object, the var will stay there untill you remove it.
With functions, you allways have to pass the var to the function, so you have to keep track of which vars to use at any point in your script.
For example, if I create a class for getting data out of a database, I can
first create a class that contains simple functions like connecting to a database and disconnecting from a database.
I can then write a class that 'extends' that basic class, and put vars and fucntions in it to fetch the data that I want.
I can write such an extent for each database that I want to get data out of.
Each of those database-specific classes re-uses the connect-disconnect functions from the base class.
But what's more important; when I call the class, it will connect to the proper database, and store the link identifier inside the object. So when I do a query from inside the object, it will automatically select the correct database connection.
that way I can create as many instances of the object as I like connecting to as many databases as I like, I will never have to worry about which database connection I'm using.
That is not easy to do with functions.
Like Synapse said, there's nothing you can do with OOP that you can't do without OOP, but there are many things you can do with OOP in 5 hours that would take 5 weeks to do without OOP.