9

这是……我什至不知道这是怎么回事。

// var_dump of items before
object(stdClass)[84]
   public '75' => object(stdClass)[87]

$items = (array) $items; // Casting unserialized stdClass to array
var_dump($items);

//Result of var dump:
array
  '75' => 
    object(stdClass)[87]

//Now lets get this item:
var_dump($items[75]); // Error
var_dump($items['75']); // Error

什么?

谢谢。

4

2 回答 2

4

我认为,您使用的是调试扩展,因此var_dump()输出与标准库不同,属性不能是数字但$obj->{'75'}没关系。如果您可以通过“是”到达子对象,则$items->{'75'}您有一个数字属性。否则您可以尝试print_r($items);查看原始输出,或者在之后检查数组get_object_vars()

    <?php

$items = new stdClass();
$items->{'75'} = new stdClass();
$items->{'75'}->{'85'} = new stdClass();


$items = (array) $items; // Casting unserialized stdClass to array
$items_array = get_object_vars($items); // getting object vars as an array.

var_dump($items["75"]); // Error
var_dump($items['75']); // Error
var_dump($items_array['75']); // Works

PHP 问题: #45959

阅读铸造块引用:http ://www.php.net/manual/en/language.types.array.php#language.types.array.casting

于 2012-05-25T17:15:37.617 回答
2

投射到数组不是那样工作的。

请参见此处:get_object_vars() 与强制转换为数组

在这里:http ://www.php.net/manual/en/language.types.array.php#language.types.array.casting

Blockquote “如果将对象转换为数组,则结果是一个数组,其元素是对象的属性。键是成员变量名称,但有一些值得注意的例外:整数属性不可访问;私有变量的类名前缀为变量名;受保护的变量在变量名前有一个“*”。这些前置值的两边都有空字节。

于 2012-05-25T17:24:37.707 回答