在PHP中写入静态类

时间:2010-03-09 20:28:51

标签: php oop

假设我有一个Config类,用于从任何地方访问配置变量(Config::X)。

是否可以实现一个可以从类外添加和/或修改属性的函数?

我想到的是这样的事情:

class Config
{
    const myVar = 'blah';
    public static function write( $name, $value )
    {
        //....
    }
}
echo Config::myVar; // Clear

Config::write( 'test', 'foo' );
echo Config::test; // Should be foo

我在CakePHP中看到了类似的东西,但无法找出解决方案。 我的目标是能够从不同的文件写入基本的Config类,例如:将数据库信息存储在单独的文件中。

3 个答案:

答案 0 :(得分:2)

如果不首先声明变量,除非丢弃静态变量并使用具体实现,否则无法实现此目的。即使您先声明变量,也必须使用`$:

来调用它们
class Config {

    const $myVar = 'blah';
    public static $test;

    public static function write( $name, $value )
    {
        //....
    }
}

Config::write( 'test', 'foo' );
echo Config::$test; // Will be foo

如果您有一个具体的实现,那么您可以利用__get and __set,这样您就不必声明所有变量。

class Config {

    const $myVar = 'blah';

    private $vars = array();

    public function __set($name, $value) {
        $this->vars[$name] = $value;
    }

    public function __get($name) {
        if(isset($this->vars[$name]) 
            return $this->vars[$name];
         return null;
    }
}

echo Config::myVar; // Still the same

$config = new Config();
$config->test = 'foo';
echo $config->test; // Will be foo

这意味着如果你需要它,你需要传递你的配置对象。如果您觉得这很烦人,您可能需要查看dependency injection

答案 1 :(得分:0)

您无法修改静态类的值。如果您希望拥有此功能,则需要创建该类的实例,并在需要将值保留在页面上时存储在其中。

答案 2 :(得分:0)

您的代码似乎使write函数绑定了一个名为$ name的新const ....从未见过以前完成的。