是否有可能动态设置php静态类变量?在下面的例子中,我想传递一个我想要设置的函数的字符串表示法“databaseInit”,然后设置var ...
class app {
static $database_smf;
static $database_phpbb;
/**
* Initialise the app
*/
static function init(){
// No initialise the db connection
self::databaseInit('database_phpbb');
self::databaseInit('database_smf');
}
static function databaseInit( $database ){
// is it possible to dynamically set the static var based on the param provided? eg:
self::[$database] = true;
}
}
答案 0 :(得分:1)
是的,这是可能的。 只是对您的代码稍作修改:
使用:
self::$$database = true;
而不是:
self::[$database] = true;
class app {
static $database_smf;
static $database_phpbb;
完整代码:
/**
* Initialise the app
*/
static function init(){
// No initialise the db connection
self::databaseInit('database_phpbb');
self::databaseInit('database_smf');
}
static function databaseInit( $database ){
// is it possible to dynamically set the static var based on the param provided? eg:
self::$$database = true;
}
}
答案 1 :(得分:0)
您可以使用普通变量变量名称:
static function databaseInit( $database ){
self::$$database = true;
}
..但是你应该重新修改它只是保留一个数组并操纵数组的键,因为这样可以将所有设置保存在单个命名空间中,而不是像其他静态变量一样,如果名称是错误的等等。
class app {
static $databases = [];
...
static function databaseInit($database) {
self::$databases[$database] = true;
}
}
下一步是让类非静态,所以它可以更容易测试,并将在本地保持其状态。