1.- Depende de el diseño de tu aplicación, a mi parecer es mucho mejor tener un try/catch global pero ahí si depende de lo que tu estes haciendo y cuando quieras atrapar el error.
2.- Basta con que limpies las variables (igualandolas a null) esto hace que se llame internamente al destructor y cierre la conexión.
3.- Puedes extender la clase sin problema, esa es una de las ventajas de POO:
Código PHP:
Ver originalclass MyPDO extends PDO {
public function foo() {
}
}
4.- Solo si sobreescribes alguna de las funciones de PDO, si no las sobreescribes no hay problema.
5.- Sirve para enviar querys a MySQL que no se cacheen en memoria, en el Manual de MySQL puedes ver más información.
6.- Esto es porque internamente incrementa o mueve el cursor, al usar fetchAll() regresa todos los datos y deja el cursor al final.
Saludos.