我遇到了“Undefined property: stdClass”的问题

4

我有一个名为event的对象,我正在尝试获取其名为event的属性,但是我遇到了这个错误

Undefined property: stdClass::$event 

我是如何访问它的

echo $event->event;

当我尝试使用var_dump来查看$event时,得到的结果如下:

object(stdClass)#198 (4) {
  ["event"]=>
  string(8) "deferral"
  ["msg"]=>
  object(stdClass)#462 (12) {
    ["ts"]=>
    int(1365109999)
    ["subject"]=>
    string(31) "This an example webhook message"
    ["email"]=>
    string(31) "example.webhook@mandrillapp.com"
    ["sender"]=>
    string(30) "example.sender@mandrillapp.com"
    ["tags"]=>
    array(1) {
      [0]=>
      string(15) "webhook-example"
    }
    ["opens"]=>
    array(0) {
    }
    ["clicks"]=>
    array(0) {
    }
    ["state"]=>
    string(8) "deferred"
    ["metadata"]=>
    object(stdClass)#487 (1) {
      ["user_id"]=>
      int(111)
    }
    ["_id"]=>
    string(32) "exampleaaaaaaaaaaaaaaaaaaaaaaaaa"
    ["_version"]=>
    string(22) "exampleaaaaaaaaaaaaaaa"
    ["smtp_events"]=>
    array(1) {
      [0]=>
      object(stdClass)#483 (6) {
        ["destination_ip"]=>
        string(9) "127.0.0.1"
        ["diag"]=>
        string(51) "451 4.3.5 Temporarily unavailable, try again later."
        ["source_ip"]=>
        string(9) "127.0.0.1"
        ["ts"]=>
        int(1365111111)
        ["type"]=>
        string(8) "deferred"
        ["size"]=>
        int(0)
      }
    }
  }
  ["_id"]=>
  string(32) "exampleaaaaaaaaaaaaaaaaaaaaaaaaa"
  ["ts"]=>
  int(1433587083)
}

这是我创建一个$data数组的方式,然后使用foreach循环来遍历它作为$event

$data = array (
              'mandrill_events' => '[{"event":"deferral","msg":{"ts":1365109999,"subject":"This an example webhook message","email":"example.webhook@mandrillapp.com","sender":"example.sender@mandrillapp.com","tags":["webhook-example"],"opens":[],"clicks":[],"state":"deferred","metadata":{"user_id":111},"_id":"exampleaaaaaaaaaaaaaaaaaaaaaaaaa","_version":"exampleaaaaaaaaaaaaaaa","smtp_events":[{"destination_ip":"127.0.0.1","diag":"451 4.3.5 Temporarily unavailable, try again later.","source_ip":"127.0.0.1","ts":1365111111,"type":"deferred","size":0}]},"_id":"exampleaaaaaaaaaaaaaaaaaaaaaaaaa","ts":1433587083},{"event":"hard_bounce","msg":{"ts":1365109999,"subject":"This an example webhook message","email":"example.webhook@mandrillapp.com","sender":"example.sender@mandrillapp.com","tags":["webhook-example"],"state":"bounced","metadata":{"user_id":111},"_id":"exampleaaaaaaaaaaaaaaaaaaaaaaaaa1","_version":"exampleaaaaaaaaaaaaaaa","bounce_description":"bad_mailbox","bgtools_code":10,"diag":"smtp;550 5.1.1 The email account that you tried to reach does not exist. Please try double-checking the recipient\'s email address for typos or unnecessary spaces."},"_id":"exampleaaaaaaaaaaaaaaaaaaaaaaaaa1","ts":1433587083},{"event":"soft_bounce","msg":{"ts":1365109999,"subject":"This an example webhook message","email":"example.webhook@mandrillapp.com","sender":"example.sender@mandrillapp.com","tags":["webhook-example"],"state":"soft-bounced","metadata":{"user_id":111},"_id":"exampleaaaaaaaaaaaaaaaaaaaaaaaaa2","_version":"exampleaaaaaaaaaaaaaaa","bounce_description":"mailbox_full","bgtools_code":22,"diag":"smtp;552 5.2.2 Over Quota"},"_id":"exampleaaaaaaaaaaaaaaaaaaaaaaaaa2","ts":1433587083},{"event":"open","msg":{"ts":1365109999,"subject":"This an example webhook message","email":"example.webhook@mandrillapp.com","sender":"example.sender@mandrillapp.com","tags":["webhook-example"],"opens":[{"ts":1365111111}],"clicks":[{"ts":1365111111,"url":"http:\\/\\/mandrill.com"}],"state":"sent","metadata":{"user_id":111},"_id":"exampleaaaaaaaaaaaaaaaaaaaaaaaaa3","_version":"exampleaaaaaaaaaaaaaaa"},"_id":"exampleaaaaaaaaaaaaaaaaaaaaaaaaa3","ip":"127.0.0.1","location":{"country_short":"US","country":"United States","region":"Oklahoma","city":"Oklahoma City","latitude":35.4675598145,"longitude":-97.5164337158,"postal_code":"73101","timezone":"-05:00"},"user_agent":"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10.6; en-US; rv:1.9.1.8) Gecko\\/20100317 Postbox\\/1.1.3","user_agent_parsed":{"type":"Email Client","ua_family":"Postbox","ua_name":"Postbox 1.1.3","ua_version":"1.1.3","ua_url":"http:\\/\\/www.postbox-inc.com\\/","ua_company":"Postbox, Inc.","ua_company_url":"http:\\/\\/www.postbox-inc.com\\/","ua_icon":"http:\\/\\/cdn.mandrill.com\\/img\\/email-client-icons\\/postbox.png","os_family":"OS X","os_name":"OS X 10.6 Snow Leopard","os_url":"http:\\/\\/www.apple.com\\/osx\\/","os_company":"Apple Computer, Inc.","os_company_url":"http:\\/\\/www.apple.com\\/","os_icon":"http:\\/\\/cdn.mandrill.com\\/img\\/email-client-icons\\/macosx.png","mobile":false},"ts":1433587083},{"event":"click","msg":{"ts":1365109999,"subject":"This an example webhook message","email":"example.webhook@mandrillapp.com","sender":"example.sender@mandrillapp.com","tags":["webhook-example"],"opens":[{"ts":1365111111}],"clicks":[{"ts":1365111111,"url":"http:\\/\\/mandrill.com"}],"state":"sent","metadata":{"user_id":111},"_id":"exampleaaaaaaaaaaaaaaaaaaaaaaaaa4","_version":"exampleaaaaaaaaaaaaaaa"},"_id":"exampleaaaaaaaaaaaaaaaaaaaaaaaaa4","ip":"127.0.0.1","location":{"country_short":"US","country":"United States","region":"Oklahoma","city":"Oklahoma City","latitude":35.4675598145,"longitude":-97.5164337158,"postal_code":"73101","timezone":"-05:00"},"user_agent":"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10.6; en-US; rv:1.9.1.8) Gecko\\/20100317 Postbox\\/1.1.3","user_agent_parsed":{"type":"Email Client","ua_family":"Postbox","ua_name":"Postbox 1.1.3","ua_version":"1.1.3","ua_url":"http:\\/\\/www.postbox-inc.com\\/","ua_company":"Postbox, Inc.","ua_company_url":"http:\\/\\/www.postbox-inc.com\\/","ua_icon":"http:\\/\\/cdn.mandrill.com\\/img\\/email-client-icons\\/postbox.png","os_family":"OS X","os_name":"OS X 10.6 Snow Leopard","os_url":"http:\\/\\/www.apple.com\\/osx\\/","os_company":"Apple Computer, Inc.","os_company_url":"http:\\/\\/www.apple.com\\/","os_icon":"http:\\/\\/cdn.mandrill.com\\/img\\/email-client-icons\\/macosx.png","mobile":false},"url":"http:\\/\\/mandrill.com","ts":1433587083},{"event":"spam","msg":{"ts":1365109999,"subject":"This an example webhook message","email":"example.webhook@mandrillapp.com","sender":"example.sender@mandrillapp.com","tags":["webhook-example"],"opens":[{"ts":1365111111}],"clicks":[{"ts":1365111111,"url":"http:\\/\\/mandrill.com"}],"state":"sent","metadata":{"user_id":111},"_id":"exampleaaaaaaaaaaaaaaaaaaaaaaaaa5","_version":"exampleaaaaaaaaaaaaaaa"},"_id":"exampleaaaaaaaaaaaaaaaaaaaaaaaaa5","ts":1433587083},{"event":"unsub","msg":{"ts":1365109999,"subject":"This an example webhook message","email":"example.webhook@mandrillapp.com","sender":"example.sender@mandrillapp.com","tags":["webhook-example"],"opens":[{"ts":1365111111}],"clicks":[{"ts":1365111111,"url":"http:\\/\\/mandrill.com"}],"state":"sent","metadata":{"user_id":111},"_id":"exampleaaaaaaaaaaaaaaaaaaaaaaaaa6","_version":"exampleaaaaaaaaaaaaaaa"},"_id":"exampleaaaaaaaaaaaaaaaaaaaaaaaaa6","ts":1433587083},{"event":"reject","msg":{"ts":1365109999,"subject":"This an example webhook message","email":"example.webhook@mandrillapp.com","sender":"example.sender@mandrillapp.com","tags":["webhook-example"],"opens":[],"clicks":[],"state":"rejected","metadata":{"user_id":111},"_id":"exampleaaaaaaaaaaaaaaaaaaaaaaaaa7","_version":"exampleaaaaaaaaaaaaaaa"},"_id":"exampleaaaaaaaaaaaaaaaaaaaaaaaaa7","ts":1433587083},{"type":"blacklist","action":"add","reject":{"reason":"hard-bounce","detail":"Example detail","last_event_at":"2014-02-01 12:43:56","email":"example.webhook@mandrillapp.com","created_at":"2014-01-15 11:32:19","expires_at":"2020-04-02 12:09:18","expired":false,"subaccount":"example_subaccount","sender":"example.sender@mandrillapp.com"},"ts":1433587083},{"type":"blacklist","action":"change","reject":{"reason":"hard-bounce","detail":"Example detail","last_event_at":"2014-02-01 12:43:56","email":"example.webhook@mandrillapp.com","created_at":"2014-01-15 11:32:19","expires_at":"2020-04-02 12:09:18","expired":false,"subaccount":"example_subaccount","sender":"example.sender@mandrillapp.com"},"ts":1433587083},{"type":"blacklist","action":"remove","reject":{"reason":"hard-bounce","detail":"Example detail","last_event_at":"2014-02-01 12:43:56","email":"example.webhook@mandrillapp.com","created_at":"2014-01-15 11:32:19","expires_at":"2020-04-02 12:09:18","expired":false,"subaccount":"example_subaccount","sender":"example.sender@mandrillapp.com"},"ts":1433587083},{"type":"whitelist","action":"add","entry":{"email":"example.webhook@mandrillapp.com","detail":"example details","created_at":"2014-01-15 12:03:19"},"ts":1433587083},{"type":"whitelist","action":"remove","entry":{"email":"example.webhook@mandrillapp.com","detail":"example details","created_at":"2014-01-15 12:03:19"},"ts":1433587083}]',
            );
$data = json_decode($data['mandrill_events']);

像这样

foreach ($data as $event) {
    echo $event->event;
}

我在这里做错了什么?


在分配动态属性之前初始化 $event = new stdClass; - Samir Das
请发布创建$event对象的代码。 - Bogdan
@Bogdan 我刚刚更新了我的问题 - 感谢您的回复。 - Muhammad
尝试运行您的代码,结果得到“deferralhard_bounce” - 它可以工作,没有未定义的属性错误。 - amik
@amik,我没有放完整的数组来缩短问题,所以现在已经更新为完整版本了 - 你能否请更新$data的新值并再试一次?对于简短的版本它似乎可以工作,但对于完整的版本却不行。 - Muhammad
1个回答

4
您的问题在于,并非所有从JSON字符串解码的对象都具有“event”属性。因此,对于那些没有该属性的对象,您会收到未定义属性的通知。您可以使用property_exists函数检查对象是否具有属性,如下所示:
foreach ($data as $event)
{
    if (property_exists($event, 'event'))
        echo $event->event;
}

这样可以避免出现未定义的属性提示,但是如果您想处理发生这种情况的情况,可以在条件中添加else块。


我应该在2小时前就问这个问题 - 我感觉很愚蠢,谢谢Bogdan。 - Muhammad
@Bogdan 这解决了问题,但现在我该如何获取数据呢?因为当我执行 DD 命令时,我可以看到数据,但是当我执行 property_exist 命令时,它却不存在? - CodeGuru
@FlyingAtom,你的问题可能与这个不同。我建议你提出一个单独的问题,并包括所需的行为和数据。 - Bogdan
我不得不在循环中检查缺失值,因为并非所有的值都已赋值。 - CodeGuru

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接