Que tal
Triby,
$this y parent funcionan como se espera, el que tiene un comportamiento "extraño" es self.
self no hace referencia a la clase donde se instancio el objeto, hace referencia a la clase donde se definió, (lo que conlleva a que el polimorfismo en contexto estático no sirva de nada), para solucionar esto PHP 5.3 introduce lo que se conoce como
late static binding.
Con respecto al "súper objeto"(es un
layer supertype con esteroides :) ?), que razón hay para que esto sea así ?, que tienen en común una vista, modelo y controller ?, entiendo que debe ser para aprovechar la "magia" de php y definir setters, getters y talvés setOptions ?, aunque la tendencia actual es cada vez menos magia y mas explicito(esto para mi es mejor).
Otra cosa, tomar CI como ejemplo no creo que sea lo más adecuado, a mi entender tiene un poco torcida la definición de hacer las cosas bien, y demasiados
wtfs/m(medida estándar de calidad de código :) ), la referencia podria ser Zend, Symfony, Yii.
Por último y no te doy mas lata, deberías hacer como si global no existiera, utiliza en su lugar alguna implementación de registry + singleton.
Saludos.