PHP: Using a Registry
Over that last dozen or so projects I have worked on I have noticed that files containing settings, and other site specific data, tend to grow pretty quickly. Each time I open a settings file I struggle with the thought, 'Do I use a define or a global variable?'. I do not really like using either. So today as I was working on a project I pondered yet again a via alternative. I decided to take a leap and build myself a registry type object. All this object does is store key value pairs. Really nothing more than a fancy associative array, but it gets the job done. I was still a bit nervous when I started actually implementing it. I almost chucked it, but I steeled myself and decided to at least finish it and see how it works with this project. So far using a registry has made it a ton easier to keep track of site configs. I no longer wonder how to store a config, I simply toss it in the registry. Everything has access to the registry so my settings are still just a few characters away. Here is the current registry class I am using. Simple for now, though it may expand as I find it useful. Note that the class is only partially phpdoc'd. By the end of this project it will be completely documented and reposted.
/** * Singleton. Use Registry->GetRegistry **/ class Registry { /** * Holds whether a registry exists already or not. * * @var Boolean */ private static $Exists = FALSE; /** * Holds the info * * @var Array **/ private $Registry; /** * Default constructor * * Sets up some normal defaults for the cms **/ private function __construct() { // Paths - PLEASE APPEND WITH / $this->Set('path_library', 'lib/'); $this->Set('path_controllers', 'controllers/'); $this->Set('path_views', 'views/'); // Smarty needs this $this->Set('path_cache', 'cache/'); // Smarty needs this // Smarty Specific $this->Set('smarty_cache_enabled', true); $this->Set('smarty_cache_life', 3600); // 1 hour in seconds $this->Set('smarty_debugging', false); // Http links $this->Set('http_link', $_SERVER['SERVER_NAME']); // Misc $this->Set('default_controller', 'home'); // Default controller } public function GetRegistry() { if(!self::$Exists) { self::$Exists = new Registry(); } return self::$Exists; } public function Set($Var, $Value) { $this->Registry[$Var] = $Value; } public function Get($Var) { return $this->Registry[$Var]; } } // end class ?>