Sto implementando il Null Object Pattern per le mie classi, quindi dalla mia User ho estratto un'interfacca iUser contenente i metodi pubblici e da lì ho derivato un'altra classe NullUser i cui metodi non facciano nulla. NullUser implementa anche l'interfaccia vuota Null in modo che io possa controllare con $u instanceof Null oppure $u instanceof User se l'utente è anonimo o autenticato, e posso chiamare $u->puoiFareLaTalCosa senza preoccupazioni perché nel caso di NullUser restituisce sempre falso.
Però sarebbe abbastanza ripetitivo e poco saggio ripetere il processo per altre 15-20 classi (Gruppo, sito partner, eccetera), non si può snellire il sistema in qualche modo?