1

我使用的库使用数组。将 print_r 应用于该数组会打印:

Array
(
    [*queueId] => 1
    [*handle] => 9b875867b36d568483fb35fdb8b0bbf6
    [*body] => First string in the TestQueue
    [*md5] => c23ba714199666efbc1dcd5659bb0a0a
    [*timeout] => 1408003330.6534
    [*id] => 2
    [*creationdate] => 2014-08-13 16:03:37
)

该库在该数组上使用了一个魔法吸气剂

public function __get($key)
{
    if (!array_key_exists($key, $this->_data)) {
        throw new Exception\InvalidArgumentException("Specified field \"$key\" is not in the message");
    }
    return $this->_data[$key];
}

当我尝试访问

$myObject->body

我遇到了异常。事实上,调试器显示 array_key_exists 将返回 false 而 _data 数组可用,如上所示

4

4 回答 4

3

星号表示该数组是一个对象的表示,可能原始对象属性受到保护。 http://php.net/manual/en/language.types.array.php#language.types.array.casting

于 2014-08-14T08:16:03.573 回答
2

正如我在评论中解释的那样,数组键实际上以星号开头。由于您不能使用的常规语法调用它们$obj->*body(它会导致语法错误),您可以使用以下内容:

$myObject->{'*body'}

这应该可以解决您的问题。

于 2014-08-14T08:17:25.897 回答
0

正如@MarkBaker 在我的问题评论中所说,问题在于我正在将具有私有属性的对象序列化到数组中。星号是这些属性是私有的标记。

于 2014-08-14T09:43:26.907 回答
0

假设这$myObject是您正在谈论的数组:

您不能使用 , 来访问数组->,请$myObject['*body']改用。(例如,您还应该将名称更改为 $myArray)

于 2014-08-14T08:21:43.340 回答