【发布时间】:2010-12-24 14:20:49
【问题描述】:
我正在研究 PHP 的转换机制,在将数组转换为对象时遇到了一个奇怪的情况
$o = (object) array('1'=>'/foo/bar');
$o = new stdClass();
var_dump($o);
据我了解,PHP 属性需要使用与 PHP 变量相同的规则进行声明。那是A valid variable name starts with a letter or underscore, followed by any number of letters, numbers, or underscores。但是,上面的代码会产生以下输出
object(stdClass)#1 (1) {
[1]=>
string(8) "/foo/bar"
}
真正奇怪的地方是当您尝试访问对象中的信息时。
var_dump($o->1); // parse error
var_dump($o->{'1'}); // NULL
var_dump(get_object_vars($o)); //array(0) { }
有没有办法获取 var_dump 报告的信息在对象中,还是在请求生命周期的剩余时间里被锁定? (实际使用为零,我只是好奇)
【问题讨论】:
-
根据我的经验,它们似乎被锁起来了,尽管我从来没有足够坚定地尝试一切。
-
事实上是这样,这是 PHP 中的一个已知问题。
-
是我们已知的,还是 PHP 团队以某种方式承认的。