无法访问阵列成员

时间:2010-12-18 15:43:24

标签: php arrays

我无法弄清楚这一点。我创建了一个返回数组数组的简单类。这是类构造函数......

class BlogComments {
public $commentArray=array();
public $blogId;

function  __construct($inId) {
    if(!empty($inId)) {
        $this->blogId=$inId;
        $sql="select id,name,url,comment,email from blog_comment where blog_id=$inId";
        $link2=GetConnection();
        $query=mysql_query($sql,$link2) or die("Invalid blog id:".mysql_error());
        while($row=mysql_fetch_array($query)) {
            $this->commentArray=array(
                "id"=>$row['id'],
                "name"=>$row['name'],
                "url"=>$row['url'],
                "email"=>$row['email'],
                "comment"=>$row['comment']
            );
        }
        mysql_close($link2);
    }
}
}

我正试图通过循环访问数组的每个成员。它正在进入循环,但返回的值为空。我已经验证数据正在写入数组。这是我的代码......

include "include/commentclass.php";
$comments = new BlogComments($post->id);
foreach($comments as $comment) {
    echo "<h4>".$comment->commentArray['name']."</h4>
        <a href=\"".$comment->commentArray['url']."\">".$comment->commentArray['url']."</a>
        <p>".$comment->commentArray['comment']."</p>";
}

基本上它返回空标签。我还验证了$ post-&gt; id保存有效值。我有什么想法吗?

感谢您的帮助, 乙

2 个答案:

答案 0 :(得分:1)

你正在做一些错误,首先是一个netcoder指出:你使用对象作为数组而没有实现Iterator接口。第二个是您将结果数组直接分配给$this->commentArray。您应该以这种方式将结果附加到数组:$this->commentArray[] = array(

答案 1 :(得分:0)

试试这个:

$comments = new BlogComments($post->id);
foreach ($comments->commentArray as $comment) {
    echo "<h4>".$comment['name']."</h4>
        <a href=\"".$comment['url']."\">".$comment['url']."</a>
        <p>".$comment['comment']."</p>";
}

new关键字返回单个对象。除非您的对象(BlogComments)实现Traversable,否则foreach将对公共属性commentArrayblogId起作用,而不会对commentArray内容起作用

您也可以让您的班级实现Iterator界面。