PHP:获取未知子类的静态变量的值[重复]

问题描述

||                                                                                                                   这个问题已经在这里有了答案:                                                      

解决方法

编辑:反射更好。 您可以尝试
get_class_vars
方法。无法访问PHP 5.2.6,但这在5.2.11中有效...
class Test {
    public static $foo;

    function __construct() {
        echo(\"...Constructing...<br/>\");
        Test::$foo = array();
        Test::$foo[\'bar\'] = 42;
    }

    function __toString() {
        return \"Test\";
    }
}


$className = \'Test\';
$class = new $className();

$vars = get_class_vars($className);

echo($vars[\'foo\'][\'bar\'] . \"<br/>\");
输出:
...Constructing...
42
    ,之所以在PHP 5.2中不起作用,是因为在PHP 5.3之前,您不允许在类名中使用变量。因此,如有可能,请使用
eval
eval(\'$result = \' . $c . \'::$foo[\\\'bar\\\'];\');
echo $result;
否则,您将不得不使用子类中的函数来接收值。例如:
class MyParent {
    public function __construct() {
        $var = $this->_getVariable();
        echo $var[\'bar\'];
    }
}

class MyChild extends MyParent {
    static $var = array(\'bar\' => \'foo\');

    protected function _getVariable() {
        return self::$var;
    }
}

new MyChild();
    ,
class Bar1 {
    static $var = array(\'index\' => \'value\');
}
class Bar2 extends Bar1 {
}
class Foo extends Bar2 {
    static $var = array(\'index\' => \'value in Foo\');
    public function __construct() {
        echo parent::$var[\'index\'];
    }
}

$foo = new Foo();
将输出\'value \',但不输出\'Foo \'中的值 希望这就是您要寻找的。     ,您可以使用
self
关键字在正在使用的类中获取类静态/调用静态方法,或使用
parent
获得父类的静态方法。由于PHP 5.3.0中
get_class
函数的更改,您可能在php 5.2.6上获得该错误