9

This is... I don't even know what this is happening.

// 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

What the?

Thanks.

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 「オブジェクトが配列に変換される場合、結果は要素がオブジェクトのプロパティである配列になります。キーはメンバー変数名ですが、いくつかの注目すべき例外があります。整数プロパティにはアクセスできません。プライベート変数にはクラス名が先頭に追加されています。変数名; 保護された変数には、変数名の前に '*' が付加されます. これらの前に付けられた値の両側には null バイトがあります.

于 2012-05-25T17:24:37.707 に答える