2010-10-10 86 views
3

我是“面向对象”PHP的新手,但迄今为止设法弄清了大部分内容。我正在建立一个网站,用户可以注册一个帐户,然后在他们的个人资料上添加嗜好,比如说。OOPHP - 如何从数据库行数组创建多个对象?

我已经设法找出创建类,对象,在数据库中存储单个用户,并从数据库中检索单个用户 - 从SQL返回的关联数组中创建一个新对象“select “查询。

当我需要它从数据库返回多行(记录)时,我现在陷入困境。例如,用户可能有7种兴趣; SQL查询将所有7行返回到关联数组中(带有字段,例如hobby_id,hobby_name,hobby_created),但是如何将这些行/业余爱好记录中的每一行都放入其自己的对象中?

我尝试过搜索各种术语,但我不知道是否仅仅缺少我需要搜索的时髦词汇。如果任何人都可以请让我知道最好的方式去做这件事,我会永远是伟大的。

非常感谢, 史蒂夫

+0

非常感谢大家的回复 - 这让我意识到,我可能只是创建一个满足要求的对象数组,我以前没有这样想过。我还没有使用PDO,暂时不想进入它(因为我仍然在处理OO)。我已经创建了“业余爱好”类,并完成了所有__construct,__get,__set等。 - 我制作了一个页面,允许用户逐一添加爱好......我只需要知道如何检索要显示在用户个人资料页面上的所有爱好。再次感谢大家! :) – SirMalius 2010-10-11 01:39:56

回答

1

当你有一系列兴趣爱好时,在foreach中创建兴趣对象。

$hobby = Array(); 
foreach ($query->results as $row) 
    $hobby = new Hobby($row['person_id'], $row['hobby']... 

或者可能是对象的散列。

+0

谢谢,我想我会给这个一个去看看我怎么走。 – SirMalius 2010-10-11 01:43:20

+0

快速问题 - 不要使用上面的代码,最后$ hobby是从数组中的最后一行派生的对象?肯定它会继续迭代并用下一个对象覆盖$爱好?或者“Array();”语法使PHP意识到每个新的Hobby对象都被添加到数组而不是替换? – SirMalius 2010-10-11 18:13:55

+0

我相信它需要添加到它。 – johnny 2010-10-11 19:16:13

0

首先你必须真正创建一个对象来处理这些爱好。你不能只在一些数据上撒上Acme OOP酱,并让它神奇地变成一个物体。一个对象既是数据又是函数(方法,实际上)与这些数据一起工作。因此,首先找出你想让你的代码用这些数据位做什么,然后从那里开始工作。

0

是否有任何理由需要将爱好作为自己的对象?它看起来像散列/数组一样正常工作。然而,如果你真的想创建一个对象,那么你可以创建一个业余爱好类来存储爱好名称/创建日期,并为他们设置获取者。是否还有其他数据需要与业余爱好相关联,还是需要进行计算?如果是这样,你可以创建Hobby类的方法来为你做这个。

3

您可以遍历结果并创建数据爱好或者如果你使用PDO你可以使用:

$stmt->fetchAll(PDO::FETCH_CLASS, 'Hobby'); 

这将创建一个业余爱好类的每一行,并使用该列的属性来自查询。

http://www.php.net/manual/en/pdostatement.fetch.php

PDO :: FETCH_CLASS:返回所请求的类的新实例 , 映射结果的列设置 在类命名的属性。如果 fetch_style包括 PDO :: FETCH_CLASSTYPE(例如 PDO :: FETCH_CLASS | PDO :: FETCH_CLASSTYPE)然后 类名称被从第一塔的值 确定。

注意:如果你使用fetch()方法,而不是使用fetchall(),你必须调用取()

$stmt->setFetchMode(PDO::FETCH_CLASS, 'Hobby'); 
0

您可以轻松地强制转换的关联数组到对象之前,调用setFetchMode()属性,如:

// $obj is instance of stdClass 
$obj = (object)array('hobby_name'=>'name'); 

问题当然不是为你所需要的对象是明确的,或者如果他们需要任何明确的类(@ Galean的答案)。

相关问题