我只是想了解为什么下面的最后两个print_r()
调用无效并抛出以下错误Undefined property: stdClass::$0
。根据PHP文档,我应该能够使用以下运算符$object->{'x'}
访问对象数字属性(x是我想要访问的数字索引)。
感谢。
$array = (object)array(
0 => 'test1',
1 => 'test2',
2 => 'test3',
'test' => (object)array(
0 => 'hi1',
1 => 'hi2',
2 => 'hi3'
)
);
print_r( $array );
print_r( $array->test );
print_r( $array->test->{'0'} );
print_r( $array->{'0'} );
die();
答案 0 :(得分:3)
这是PHP brokenness。对象属性访问的卷曲括号语法不适用于全数字键。
答案 1 :(得分:1)
将数组类型转换为对象时,全数字键将转换为整数属性;无法访问整数属性。
$array = array(0 => 'a', 1.5 => 'b', '2' => 'c');
var_dump((object) $array);
// object(stdClass)#1 (3) { [0]=> string(1) "a" [1]=> string(1) "b" [2]=> string(1) "c" }
但是,当使用花括号表示法设置所有数字属性时,它们将存储为字符串; 可以访问。
$array = (object) array();
$array->{0} = 'a';
$array->{1.5} = 'b';
$array->{'2'} = 'c';
var_dump($array);
// object(stdClass)#1 (3) { ["0"]=> string(1) "a" ["1.5"]=> string(1) "b" ["2"]=> string(1) "c" }
因此你遇到了问题。
答案 2 :(得分:-2)
这是工作:
$array = (object)array(
a => 'test1',
b => 'test2',
c => 'test3',
'test' => (object)array(
a => 'hi1',
b => 'hi2',
c => 'hi3'
)
);
print_r( $array );
print_r( $array->test );
print_r( $array->test->a);
print_r( $array->b );
die();