假设我有一个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类,例如:将数据库信息存储在单独的文件中。
答案 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 ....从未见过以前完成的。