I used to do the switch() approach as well until I figured out I could do this instead:
$function = '';
if(isset($_GET['Action']))
$function = 'Do_' . $_GET['Action'];
if(function_exists($function))
$function($_POST, $_GET);
else
Do_Default($_POST, $_GET);
Basically, "Action" as a parameter on the URL will define which function gets executed. I can go into more details, but I post this as an example to my discussion below...
In the above code, its pretty easy to add additional functionality. Its procedural and nothing too exciting is going on here. Its possible it could be wrapped up in a class, but I haven't seen the value in it.
I could see value in setting the get and post variables as a member of the class (as well as maybe server, cookie, and file variables). But I find when I go from working on one site to the next, they have different requirements and I end up modifying the code to fit the needs.
I have heard some arguments which say OOP for web development is overkill (the amount of complexity versus the advantages in performance, readability, and maintenance). I would say if I was with a group of web developers all coding for 1 large site, then OOP would definitely be a great way to go. OOP forces structure and to some degree documentation.
But then I believe in using the right tool for the right job. If you're comfy with OOP, go for it. If not, procedural work will great too...