se dichiari un metodo statico inaccessibile (protetto) e dichiari anche il metodo __callStatic($nome, $argomenti), viene richiamato quest'ultimo con il nome del motodo invocato e degli argomenti passati... puoi quindi fare tutte le operazioni che vuoi e infine invocare il metodo "originale" (che dall'interno della classe è ovviamente accessibile)
Una strada diversa è inserire in ogni metodo una chiamata a un metodo privato "Check()" (o simile) che faccia dei controlli prima del proseguimento delle operazioni (questa via secondo me è più pulita)