PHP - Array to object - 通过索引获取对象变量时出现问题

时间:2013-03-08 22:03:54

标签: php

我只是想了解为什么下面的最后两个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();

3 个答案:

答案 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();