首页 > 解决方案 > 在 php 类中动态创建“受保护的静态”变量

问题描述

class KD_DB extends PDO {
    protected static $dbOne = '';
    protected static $dbTwo = '';

    public function setVariable ($alias,$content){
        switch($alias){
            case'one':  self::$dbOne = $content;  break;
            case'two':  self::$dbTwo = $content;  break;
        }
    }
}

有没有办法动态创建这些?

像这样的东西来创建protected static variables

    public function setVariable ($alias,$content){
            self::${$alias} = $content;
    }

它没有用,但我怀疑这是因为我需要它是静态的才能使其与扩展这个类的第三类一起工作......

标签: phpclasspdoextends

解决方案


如果您只有这两个变量,则可能更容易(使用更合适的名称)static function为每个变量设置它们,例如...

class KD_DB {
    public static $dbOne = '';
    public static $dbTwo = '';

    public static function setOne ($content){
        self::$dbOne = $content;
    }
}

KD_DB::setOne("value for one");

var_dump(KD_DB::$dbOne);

(代码稍作改动以显示流程)

但是如果你想要一个更开放的方法,我会选择一个关联数组作为静态变量,然后使用 1 方法(就像你现在一样)来设置数组中的值......

class KD_DB {
    public static $data = [];

    public static function setVariable ($alias,$content){
        self::$data[$alias] = $content;
    }
}

KD_DB::setVariable("three", "value for three");

var_dump(KD_DB::$data);

如果您错误输入了应该在测试期间找到的变量引用,则此方法可能会出现问题,但确实提供了灵活性。


推荐阅读