These problems have been solved by the various popular php-based MVC frameworks. My favourite is http://www.cakephp.org/, but I hear a lot of good things about http://codeigniter.com/ as well.
Recently I played with Django+Python. One thing I found difficult with MVC frameworks is how to make memcached for per query more comfortable. Contrary, hand coded oo interface can handle that well. (You can always hand code memcached layer in your own model with MVC framework of course, but here I am arguing that framework should have a universal way to make the utility of memcached invisible)
Yes! I'm copying and pasting some code from various areas.
Here is an old and slightly modified mysql result set iterator that fits the purposed of the newer code that makes this example nice: http://codepad.org/nmD4pDES
Here is a windowing iterator, it gives the person the ability to shift and pop elements from the inner iterator, thus narrowing the field that the iterator goes over: http://codepad.org/IsE5U7cw
Great article. I'm writing an open source PHP framework called Recess! which addresses these issues and an alpha release will be public in a week or so. http://www.recessframework.com/
Nice heads-up advice. Basically it could be summarized by 'Abstract, abstract and abstract some more' or if you're a Python aficionado DRY (don't repeat yourself).