如何解决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上获得该错误
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。