Довольно давно уже пользуюсь проверкой типов в методах. С тех пор как начал работать с PHP после Java. Очень удобно:
interface Processor { function processData(); } class DataProcessingModule implements Processor { public function processData() { return 'processed data'; } } function process(Processor $processor = null) { if($processor===null) return false; return $processor->processData(); }