4

我只是想了解为什么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();
4

3 回答 3

3

这就是PHP 的崩溃。对象属性访问的花括号语法不适用于全数字键

于 2013-03-08T22:21:39.020 回答
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" }

因此,您遇到的问题。

于 2013-03-08T22:29:23.443 回答
-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();
于 2013-03-08T22:06:57.323 回答