到目前为止,我已经在我的应用程序中使用了许多对象,但通常如果我必须在页面上显示例如用户的配置文件,我只是使用我的对象中的一些方法从数据库中获得20个用户作为数组并将其分配给视图。
现在我想用代表真实数据的模型创建更多的应用程序。对于每个用户,我应该有一个带有属性的user对象。
在这里,我放了示例代码从数据库中获取用户并在PHP中显示它们:
<?php
$db = new mysqli('localhost', 'root', '', 'mytest');
class User
{
private $id;
private $name;
public function __construct($data)
{
foreach ($data as $k => $v) {
if (property_exists($this, $k)) {
$this->$k = $v;
}
}
}
public function show()
{
return $this->id . ' ' . $this->name ;
}
}
$result = $db->query("SELECT * FROM `user` LIMIT 20");
$users = array();
while ($data = $result->fetch_object()) {
$data->x = 10; // just to test if property isn't created
$users[] = new User($data);
}
// displaying it on page
foreach ($users as $user) {
echo $user->show() . "<br />";
}
:
这是我应该使用数据从数据库到模型的方式?我的意思是,如果我应该为每条记录创建对象,即使这个对象的唯一角色是返回一些数据来查看(例如,甚至没有像本例中那样被任何函数修改)。当然,我知道通常应该准备好显示数据或进行一些计算,或者在使用这些数据显示之前应该从数据库中检索额外的数据。
是否有任何方法从数据库中分配对象属性比使用构造函数与循环更简单?
首先,我会将DB操作移动到一个单独的类中,而不是与User类内联。您可以创建一个抽象的Model类,User类将对其进行扩展并向其添加DB逻辑。
您将有一个select()方法来查询数据库,该方法将返回扩展了Model类(在本例中为User类)的类的对象数组。
:
- 我觉得还可以。大多数orm都是这样工作的。
- 另一种方法是将DB中的用户行数据分配给user类中的$data属性,并使用魔术方法__get和__set来访问它们。