{ function encode() { return 'this is blogger object'; } } class MegaApptEncoder extends ApptEncoder { function encode() { return 'this is mega object'; } } class CommsManager { const BLOGGS = 1; const MEGA = 2; private $mode = 1; function getApptEncode() { switch ($this->mode) { case self::BLOGGS: return new BloggerEncoder(); case self::MEGA: return new MegaApptEncoder(); } } } $comms = new CommsManager(CommsManager::BLOGGS); $apptEncoder = $comms->getApptEncode(); echo $apptEncoder->encode();