} } class MegaMainEncoder extends MainEncoder { function encode() { return "Это мы чтото делали с классом MegaMainEncoder"; } } class CommsManager { const BLOG = 1; const MEGA = 2; private $mode = 1; function __construct($mode) { $this->mode = $mode; } function getMainEncoder() { switch ($this->mode) { case self::MEGA: return new MegaMainEncoder(); default: return new BlogMainEncoder(); } } } $result = new CommsManager(CommsManager::BLOG); $someClass = $result->getMainEncoder(); print $someClass->encode();