OOP is a way a coder can represent a collection as an object. Be it a collection of variables or a collection of functions. The collection relates to each item in some way (a way which a class defines).
There's concepts I use with my sites that are of OOP nature, but they are not objects (they're functions). I don't consider this OOP programming (I might consider it more of OOP thinking then anything). I do use objects and classes when I have a complex collection of data that is related and I may need to do various operations on.
OOP and PP are both great approaches for web development. There's been some argument I've heard in the past about OOP being overkill for a website, but personally I think thats up to the developer and their skills. If OOP isn't their thing, then PP is the way to go. If all they've known is OOP, then run with it.
Usually OOP is easier to work with in the end. Let's say you have an object. The one clear example is the object can be plugged into another project and immediately used. But lets say this is just for 1 site. The object tends to be self documenting. Since its been broken down and organized into code that resembles OOP, you know where to find the object's variables and member functions. Basically, its a great way to organize your data. This means it'll be easier for you and someone else to read the code later on. You can definitely do this with PP too, but because there's less design restrictions, coders use their own style and thought process at a given time and it may end up being unclear what they were thinking later on even to themselves (been there, done that). I've gone back to my PP flavored code and it can be like spaghetti (what the heck was I thinking?!). But I've also gone back to my OOP code and yeah, there's a few minutes I have to spend digesting whats going on, but then it all makes sense.
A made up example of OOP thinking:
You have a car. It has a collection of attributes. Make, model, year, color, mileage, and other fun stuff. You could store this data in individual variables or you could put all of this in a class.
class Car
{
var $make, $model, $year;
} // end class car
You want to get fancy and now actually define a car using code. You might do something like this:
$mycar = new Car("Honda", "Civic", "1998");
(Note, I didn't provide code for the construtor which is needed to accept the data I passed to Car()).
So now you have data in $mycar. You might decide you want to be able to do some tricks with it. In theory, you could have another object called garage and car becomes a member of garage. Or you wish to have multiple cars:
$mycar = array();
$mycar[0] = new Car("Acura", "Integra", "1995");
$mycar[1] = new Car("Honda", "Civic", "1998");
Notice here I defined 2 cars with 2 lines of code. If you didn't use a class, you would have had something like this:
$make = array();
$model = array();
$year = array();
$make[0] = "Acura";
$make[1] = "Honda";
$model[0] = "Integra";
$model[1] = "Civic";
$year[0] = "1995";
$year[1] = "1998";
Instead of keying these all out, you might have instead used some array() tricks where you define all your cars within the array statement, but what will you do when you wish to add a car later on? How will you pass all this data to another function? With classes, you already have the code to add a new car and you can just pass the object $mycar and you're done.
Poor examples, but they're just something to look at and ponder...