mmmmm
Varias cosas:
1.- No es lo mas correcto usar valores por defectos en tus funciones que vayan de izquierda a derecha, asi:
Código:
function algo( $unvalor = 1, $otrovalor, $otrovalormas );
Mas bien es al revez, yo creo el compilador te deberia de marcar un error, pero si no lo hace de todos modos consideralo un error.
2.- En todas tus clases en las que heredas pasas el parametro de $tipo, este deberia ser mas bien un atributo privado, si no, no tiene caso que hagas diferentes tipos de clase.
3.- Las interfaces es mejor utilizarlas cuando quieres que las clases tengan una firma predeterminada, es decir cuando quieres que acepten trabajar de cierta forma, si no, es mejor utilizar clases abstractas.
Saludos.