我正在研究PHP的类型转换机制,并在将数组强制转换为对象时遇到了一个奇怪的情况。
$o = (object) array('1'=>'/foo/bar');
$o = new stdClass();
var_dump($o);
据我理解,PHP属性需要按照与PHP变量相同的规则声明。也就是说,一个有效的变量名以字母或下划线开头,后面可以跟任意数量的字母、数字或下划线。然而,上述代码会产生以下输出:
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报告的对象信息,或者它只是在请求生命周期的其余时间中被锁定了?(这个问题实际上没有实际用途,我只是好奇)