try { self::pee(); // Note, don't pee ON self } catch(SeatNotOpenException $e) { $seat = self::findSeat(); $seat->open(); // Now you can try again }