Этого нельзя достичь, не объявив сначала переменные, если вы не отбросите статические переменные и не будете использовать конкретные реализации. Даже если вы сначала объявите переменные, вам придется вызывать их, используя `$:
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 и __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
Это будет означать, что вам нужно будет передать ваш конфигурационный объект, если он вам нужен где-то. Если вас это раздражает, возможно, вы захотите изучить внедрение зависимостей .