PHP如何从字符串

时间:2017-02-26 10:12:47

标签: php

是否有可能动态设置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;
    }
}

2 个答案:

答案 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;
    }
}

下一步是让类非静态,所以它可以更容易测试,并将在本地保持其状态。