Re: static __get function

From: Date: Sat, 24 Apr 2004 12:16:05 +0000
Subject: Re: static __get function
References: 1 2  Groups: php.general 
Request: Send a blank email to php-general+get-184510@lists.php.net to get a copy of this message
Hi Marek Thanks for the response Two things you should notice is my declaration of the constructor as private and the $ConfigSettings variable as static. This class is designed in such a way that it can never be instantiated, preventing loading the configuration file twice and possibly having inconsistent copies of the config file in memory. I've tried the __get and __set functions as just regular non-static ones, but same problem. I am using self:: instead of $this-> because of the reasons mentioned above about not wanting to instantiate the object, only have its static members loaded. In this way I refer to the class, not a specific instance of the class; a real instance should never really exist. Dave Marek Kilimajer wrote:
I'm not sure if it will help but do't define the magic functions as public static, use just: function __get(...) The function is not public anyway, as it should no be called directly. And to my knowledge self:: references a class, not an object. You should use $this-> instead. David Goodlad static objectwrote:
Hi all... I'm trying to build a simple configureation class (using the singleton pattern). Using PHP5, I want to use the __get and __set methods to access configuration settings for my site. However, they don't work :P Here's my class definition: class Configuration { static private $ConfigSettings; private function __construct() { } public static function __get($Setting) { if (!is_array(self::$ConfigSettings)) { require_once(dirname(__FILE__) . '/../../configs/Framework.conf.php'); } if (isset(self::$ConfigSettings[$Setting])) { return self::$ConfigSettings[$Setting]; } return NULL; } public static function __set($Setting, $Value) { self::$ConfigSettings[$Setting] = $Value; } } However, instead of doing something like: Configuration::DbType = 'mysql'; I have to use: Configuration::__set('DbType', 'mysql'); It works, yes, but not quite like I want it to - it just seems 'ugly' to me. This is using PHP5 RC1 on Apache 2.0.49 (linux). Any suggestions? Dave


« previous php.general (#184510) next »