【发布时间】:2011-06-09 20:59:10
【问题描述】:
我有一个用户表,其中包含我想在登录用户的 mysql 查询中访问的一堆列。最终,我希望这些列中的值形成一个用户对象。是否有执行此操作的标准函数,或者我基本上需要将查询的每个值传递到新的 User 语句中,以便将它们传递给 User 类的构造函数?
【问题讨论】:
标签: php mysql object constructor
我有一个用户表,其中包含我想在登录用户的 mysql 查询中访问的一堆列。最终,我希望这些列中的值形成一个用户对象。是否有执行此操作的标准函数,或者我基本上需要将查询的每个值传递到新的 User 语句中,以便将它们传递给 User 类的构造函数?
【问题讨论】:
标签: php mysql object constructor
mysql_fetch_object() 允许您指定类名,以便根据您的结果构造该类的实例:
$result = mysql_query($sql); // Error handling not included
if (mysql_num_rows($result) == 1) {
$user = mysql_fetch_object($result, 'User');
}
除非您指定与SELECT 查询中列出的列相对应的属性及其访问修饰符,否则它们将默认为public。
您的对象的构造函数在填充其属性后调用。您想要执行的任何更改或附加任务都可以在构造函数中执行。
【讨论】:
【讨论】:
您应该结帐mysqli_result::fetch_object。您也可以查看PHP's PDO extension。
首先,了解你的餐桌。
CREATE TABLE `user` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`username` VARCHAR(256) NOT NULL,
`password` VARCHAR(256) NOT NULL,
PRIMARY KEY (`id`)
);
创建您的对象。您不需要定义任何这些字段,因为默认情况下它们将作为public 添加到您的对象中,但以后可能会维护您的代码的任何人都清楚;为清楚起见定义字段。访问器和修改器是必需的,因为这些字段是私有的。
class User {
private $id;
private $username;
private $password;
public function __construct($id, $username, $password) {
$this->id = $id;
$this->username = $username;
$this->password = $password;
}
public function getId() { return $this->id; }
public function setId($id) { $this->id = $id; }
public function getUsername() { return $this->username; }
public function setUsername($username) { $this->username = $username; }
public function getPassword() { return $this->password; }
public function setPassword($password) { $this->password = $password; }
}
创建一个查询类。其中很多是样板代码,可以提取到抽象类中。
class UserQuery {
public function create() {
return new self();
}
public function findById($id) {
$user = null;
$conn = mysqli_connect("localhost", "root", "pass", "company_db");
if ($conn->connect_error)
die("$conn->connect_errno: $conn->connect_error");
$query = "SELECT * FROM `user` WHERE `id` = ?";
$stmt = $conn->stmt_init();
if (!$stmt->prepare($query)) {
print "Failed to prepare statement\n";
} else {
$stmt->bind_param('i', $id);
$stmt->execute();
$result = $stmt->get_result();
$obj = $result->fetch_object();
return new User($obj->id, $obj->username, $obj->password);
}
$stmt->close();
$conn->close();
return null;
}
}
从user 表中获取User 对象。
$user = UserQuery::create()->findById(1);
printf("Found user: %s", $user->getUsername());
【讨论】: