1.- Es mejor usar require_once, las razones son, require te genera un error fatal si no existe la clase, lo cual es lo necesario si tu clase depende de esa otra clase. El _once ayuda a solo incluirla una vez y evitar errores como "class db already defined in..".
2.- En PHP es necesario el uso de $this->, o de lo contrario el interprete de PHP no va a reconocer que te refieres a la clase, si no a una variable local.
3.- Ve el punto 1.
4.- Tanto en Java, como en PHP, y como en todos los lenguajes OO, lo mejor siempre es encapsular tu clase y usar setters/getters.
5.- Es para hacer llamadas a métodos estaticos de una clase, en PHP se le conoce como Paamayim Nekudotayim, en el Manual de PHP puedes ver
más información.
6.- En PHP6 existen los PARs que son como los JARs de Java.
7.- No, el Garbage Collector de PHP se encarga de cerrar la conexión, limpiar el resultado solo es recomendado si tu query va a utilizar muchos recursos y quieres liberarlos para limpiar memoria.
Saludos.