PHP找不到数组元素

时间:2014-08-14 08:10:20

标签: php zend-queue

我使用的库使用数组。将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 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

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

$myObject->{'*body'}

这可以解决您的问题。

答案 2 :(得分:0)

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

您无法使用->访问数组,而是使用$myObject['*body']。 (你应该将名称更改为$ myArray,例如)

答案 3 :(得分:0)

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