我是“面向对象”PHP的新手,但到目前为止已经设法解决了大部分问题。我正在建立一个网站,用户可以注册一个帐户,然后在他们的个人资料中添加爱好。
我已经设法找出创建类,对象,在数据库中存储单个用户,以及从数据库中检索单个用户 - 从SQL“select”返回的关联数组创建一个新对象查询。
我现在遇到的困难是我需要从数据库返回多行(记录)。例如,用户可能有7个爱好; SQL查询将所有7行返回到一个关联数组(包含字段,例如hobby_id,hobby_name,hobby_created),但是如何将这些行/业余爱好记录中的每一个都写入自己的对象?
我试过搜索各种术语,但我不知道我是否只是错过了我需要搜索的热门词。如果有人可以请让我知道最好的方法,我将永远是伟大的。
非常感谢, 史蒂夫
答案 0 :(得分:3)
您可以循环搜索结果并根据数据创建爱好,或者如果您使用的是PDO,则可以使用:
$stmt->fetchAll( PDO::FETCH_CLASS, 'Hobby' );
这将为每一行创建一个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(),则必须在调用fetch()之前使用setFetchMode()
$stmt->setFetchMode( PDO::FETCH_CLASS, 'Hobby' );
答案 1 :(得分:1)
当你有一系列爱好时,在foreach中创建爱好对象。
$hobby = Array();
foreach ($query->results as $row)
$hobby = new Hobby($row['person_id'], $row['hobby']...
或者也许是对象的哈希。
答案 2 :(得分:0)
首先,您必须实际创建一个对象来处理这些爱好。你不能只是在一些数据上撒上Acme OOP酱,并让它神奇地变成一个物体。对象是处理该数据的数据和函数(实际上是方法)。因此,首先弄清楚你希望你的代码用那些hobbie数据位做什么,然后在那里工作。
答案 3 :(得分:0)
业余爱好需要成为自己的对象吗?它看起来像散列/数组一样正常。但是,如果你真的想创建一个对象,那么你可以创建一个存储爱好名称/创建日期的爱好类,并为它们提供getter。是否有任何其他数据与业余爱好或需要进行的计算相关联?如果是这样,您可以创建Hobby类的方法来为您执行此操作。
答案 4 :(得分:0)
您可以轻松地将关联数组类型转换为具有属性的对象,例如:
// $obj is instance of stdClass
$obj = (object)array('hobby_name'=>'name');
当然,对于你需要什么对象,或者他们是否需要任何明确的类(@Galean的答案),问题并不明确。