global => evil * Note2: Cannot be subclassed or mock-uped or have multiple different instances */ class StaticFactory { /** * the parametrized function to get create an instance * * @static * @return Formatter */ public static function factory($type) { $className = __NAMESPACE__ . '\Format' . ucfirst($type); if (!class_exists($className)) { throw new \InvalidArgumentException('Missing format class.'); } return new $className(); } }