You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从数组取值抛出ErrorException异常,求助显示数组事件键的方法

解决 "Trying to get property of non-object" 异常问题

看起来你在遍历PAMI返回的事件数组时踩了个小坑——这个异常说明你在尝试用对象属性的访问方式(->)去操作一个非对象的值,或者数组里混进了非对象元素。结合你给出的var_dump内容,我帮你拆解下问题和解决办法:

问题根源分析

从var_dump可以看到,events数组里的元素是PAMI\Message\Event\PeerEntryEvent类型的对象,但异常提示你在访问非对象的属性,大概率是这两种情况:

  • 遍历events数组时,其中某一个元素不是对象(比如是null、普通数组或者其他基础类型)
  • 你错误地混淆了数组和对象的访问语法,比如用$event->key去访问数组元素,或者直接访问了对象的protected属性(比如rawContent)

正确的处理步骤

1. 遍历前先校验元素类型

在遍历events数组时,先确认每个元素是目标事件对象,避免直接访问非对象导致报错:

// 假设$response是你拿到的PAMI\ResponseMessage对象
foreach ($response->events as $event) {
    // 先校验是不是PeerEntryEvent对象(或者更通用的PAMI Event对象)
    if ($event instanceof \PAMI\Message\Event\PeerEntryEvent) {
        // 获取单个键值,比如event名称
        $eventName = $event->getKey('event');
        echo "事件名称:{$eventName}\n";

        // 如果要获取这个事件的所有键值对
        $allEventKeys = $event->getKeys();
        foreach ($allEventKeys as $key => $value) {
            echo "{$key}: {$value}\n";
        }
    } else {
        // 打印非对象元素,排查为什么会出现这个情况
        echo "发现非对象元素:";
        var_dump($event);
    }
}

2. 不要直接访问protected属性

从var_dump里能看到rawContent、channelVariables这些是protected属性,不能直接用$event->rawContent访问,必须用PAMI对象提供的getter方法,比如getRawContent()或者getKey()来获取对应的值。

3. 排查数组中的非对象元素

如果上面的代码打印出了非对象元素,那你需要回溯下为什么events数组里会有非对象——可能是PAMI返回的响应中包含了其他类型的内容,或者你在处理数组时不小心修改了元素类型。

额外提示

PAMI的事件对象通常都实现了统一的方法来获取属性,比如:

  • getKey(string $name):获取单个指定键的值
  • getKeys():获取所有键值对数组
  • 部分事件还有专属的getter方法,比如getObjectName()来直接获取ObjectName属性值

内容的提问来源于stack exchange,提问作者Alan Spurlock

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 03:08:08