PHP 找不到数组元素



我使用的库使用数组。对该数组应用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
)

标准库在数组

上使用了一个魔法getter
public function __get($key)
{
    if (!array_key_exists($key, $this->_data)) {
        throw new ExceptionInvalidArgumentException("Specified field "$key" is not in the message");
    }
    return $this->_data[$key];
}

当我试图访问

$myObject->body

我遇到了异常。实际上,调试器显示,当_data数组可用时,array_key_exists将返回false,如上面打印的

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

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

$myObject->{'*body'}

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

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

你不能用->访问数组,用$myObject['*body']代替。(你也应该改变名称为$myArray,例如)

最新更新