Php 尝试获取非对象错误的属性

Php 尝试获取非对象错误的属性,php,Php,我试图弄明白为什么我总是得到一些非对象错误的属性。使用我创建的数组。我创建了这个数组,并且正在对它进行搜索,从我的对象数组的外观来看,这些属性确实存在 我得到了这方面的错误: // Separates each of the last 5 pesonal messages foreach ($last_5_personal_messages AS $message) { echo '<li>'; echo '<span class="icon avatar"&g

我试图弄明白为什么我总是得到一些非对象错误的属性。使用我创建的数组。我创建了这个数组,并且正在对它进行搜索,从我的对象数组的外观来看,这些属性确实存在

我得到了这方面的错误:

// Separates each of the last 5 pesonal messages
foreach ($last_5_personal_messages AS $message)
{
    echo '<li>';
    echo '<span class="icon avatar"><img src="'.$message->sender_avatar.'" alt="" /></span>';
    echo '<span class="name"><a href="'.$site_url.'/personalmessages/viewmessage/'.$message->message_id.'"><strong>'.$message->sender_name.'</strong></a><span class="time">'.$message->datetime_sent.' ago</span></span>';
    echo '<span class="msg">'.$message->subject.'</span>';
    echo '</li>';
}
?>


Array
(
[0] => stdClass Object
    (
        [message_id] => 1
        [subject] => Test Message
        [datetime_sent] => 2 weeks
        [attachments] => 
        [priority] => 0
        [message_content] => Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
        [message_read] => 0
        [is_favorite] => 0
        [sender_name] => Mike Scott
        [sender_email_address] => myemail@myemail.com
        [sender_avatar] => http://dev.myserver.com/assets/themes/supr/images/avatars/avatar5.jpg
    )

[1] => stdClass Object
    (
        [message_id] => 2
        [subject] => Testing PM Message
        [datetime_sent] => 3 weeks
        [attachments] => Array
            (
                [0] => Array
                    (
                        [file_name] => file1.jpg
                        [is_file] => 1
                        [file_size] => 7.01 KB
                        [file_location] => assets/downloads/file1.jpg
                    )

                [1] => Array
                    (
                        [file_name] => file2.jpg
                        [is_file] => 
                    )

                [2] => Array
                    (
                        [file_name] => file3.jpg
                        [is_file] => 
                    )

            )

        [priority] => 0
        [message_content] => This is jsut a test of the personal message system!
        [message_read] => 0
        [is_favorite] => 0
        [sender_name] => Kevin Scott
        [sender_email_address] => myemail@server.com
        [sender_avatar] => http://dev.myserver.com/assets/themes/supr/images/avatars/avatar5.jpg
    )

[2] => stdClass Object
    (
        [message_id] => 3
        [subject] => Testing Whatever
        [datetime_sent] => 1 week
        [attachments] => 
        [priority] => 0
        [message_content] => Testing Message Content
        [message_read] => 0
        [is_favorite] => 0
        [sender_name] => Frank Scott
        [sender_email_address] => frankscott@testemail.com
        [sender_avatar] => http://dev.myserver.com/assets/themes/supr/images/avatars/avatar.jpg
    )

[total_unread_messages] => 3
)
//分隔最后5条个人消息中的每一条
foreach($message的最后5条个人消息)
{
回音“
  • ”; 回显“发送者化身”。“alt=”“/>”; 回显“”。$message->datetime_sent.'ago'; 回显“.$message->subject.”; 回音“
  • ”; } ?> 排列 ( [0]=>stdClass对象 ( [消息id]=>1 [主题]=>测试消息 [datetime_sent]=>2周 [附件]=> [优先级]=>0 [信息内容]=>知识本身是一种美德,是一种美德,是一种美德,是一种美德,是一种美德,是一种美德,是一种美德,是一种美德,是一种美德,是一种美德有时,我们会毫不犹豫地把动物当作劳动来惩罚。 [消息读取]=>0 [是你最喜欢的]=>0 [发件人名称]=>迈克·斯科特 [发件人\电子邮件\地址]=>myemail@myemail.com [sender_avatar]=>http://dev.myserver.com/assets/themes/supr/images/avatars/avatar5.jpg ) [1] =>stdClass对象 ( [消息id]=>2 [主题]=>测试PM消息 [datetime_sent]=>3周 [附件]=>阵列 ( [0]=>阵列 ( [文件名]=>file1.jpg [是_文件]=>1 [文件大小]=>7.01KB [文件位置]=>assets/downloads/file1.jpg ) [1] =>阵列 ( [文件名]=>file2.jpg [是_文件]=> ) [2] =>阵列 ( [文件名]=>file3.jpg [是_文件]=> ) ) [优先级]=>0 [message_content]=>这是对个人信息系统的测试! [消息读取]=>0 [是你最喜欢的]=>0 [发件人名称]=>凯文·斯科特 [发件人\电子邮件\地址]=>myemail@server.com [sender_avatar]=>http://dev.myserver.com/assets/themes/supr/images/avatars/avatar5.jpg ) [2] =>stdClass对象 ( [消息id]=>3 [主题]=>测试任何东西 [datetime_sent]=>1周 [附件]=> [优先级]=>0 [消息内容]=>测试消息内容 [消息读取]=>0 [是你最喜欢的]=>0 [发件人姓名]=>弗兰克·斯科特 [发件人\电子邮件\地址]=>frankscott@testemail.com [sender_avatar]=>http://dev.myserver.com/assets/themes/supr/images/avatars/avatar.jpg ) [未读邮件总数]=>3 )
    因为数组中的键“total\u unread\u messages”没有对象作为值,所以在foreach时跳过该值

    foreach ($last_5_personal_messages AS $message)
    {
        if(!is_object($message)){
          continue;
        }
        echo '<li>';
        echo '<span class="icon avatar"><img src="'.$message->sender_avatar.'" alt="" /></span>';
        echo '<span class="name"><a href="'.$site_url.'/personalmessages/viewmessage/'.$message->message_id.'"><strong>'.$message->sender_name.'</strong></a><span class="time">'.$message->datetime_sent.' ago</span></span>';
        echo '<span class="msg">'.$message->subject.'</span>';
        echo '</li>';
    
    }
    
    foreach($message的最后5条个人消息)
    {
    如果(!是_对象($message)){
    继续;
    }
    回音“
  • ”; 回显“发送者化身”。“alt=”“/>”; 回显“”。$message->datetime_sent.'ago'; 回显“.$message->subject.”; 回音“
  • ”; }
    另一种方式

    for($i=0;$i<$last_5_personal_messages['total_unread_messages'];$i++)
    {
       $message = $last_5_personal_messages[$i];
    
        echo '<li>';
        echo '<span class="icon avatar"><img src="'.$message->sender_avatar.'" alt="" /></span>';
        echo '<span class="name"><a href="'.$site_url.'/personalmessages/viewmessage/'.$message->message_id.'"><strong>'.$message->sender_name.'</strong></a><span class="time">'.$message->datetime_sent.' ago</span></span>';
        echo '<span class="msg">'.$message->subject.'</span>';
        echo '</li>';
    }
    

    for($i=0;$iGBD是正确的,这是因为
    total\u unread\u messages
    键不包含对象作为其值,因此您会收到此警告

    如果您不想让
    if(is\u object())
    检查每个循环迭代,您还可以手动迭代该数组,使用
    total\u unread\u messages
    中的信息,这样做应该可以:

    for( $i = 0; $i < $last_5_personal_messages['total_unread_messages'] && $i < 5; $i++) {
        $message = $last_5_personal_messages[$i];
         echo '<li>';
         // ....
    }
    

    回答得很好。谢谢。但是,有没有更好的方法可以将该值添加到数组中,这样我就不必担心这样做了。但这只有一个问题。total unread messages键是一个不仅仅是最后5条消息的键。我是否应该取出该键,然后以不同的方式传递该值?如果它更大,那么一个
    5
    ,在经过5次迭代后中断循环-我已经编辑了我的答案,如果有5条以上的消息,就停止循环。@user1724167很好。.我知道这个问题,但无法给出更好的解决方案,这是nickb给出的:)
    unset( $last_5_personal_messages['total_unread_messages']);
    foreach( $last_5_personal_messages as $message) {
        // ...
    }