【发布时间】:2018-10-08 17:20:35
【问题描述】:
方案一:先查询数据,再将数据传给构造函数
方案二:使用构造函数查询数据,然后填充属性
选项 1 示例
$val1 = 1;
$query = mysql_query("SELECT val2, val3, val4 FROM table WHERE val1 = '".$val1."'");
$row = mysql_fetch_assoc($query);
$o = new Class($row['val1'], $row['val2'], $row['val3'], $row['val4']);
选项 2 示例
$val1 = 1;
$o = new Class($val1);
// in Class constructor
public function __construct($val1) {
$query = mysql_query("SELECT val2, val3, val4 FROM table WHERE val1 = '".$val1."'");
$row = mysql_fetch_assoc($query);
$this->val1 = $row['val1'];
$this->val2 = $row['val2'];
// etc ...
}
注意事项
我完全清楚 mysql_query 已被弃用。请克制住那种告诉我的压倒性冲动。这些是项目的要求。
我在问选项 2 是否是不好的做法,或者是否存在任何在面向对象领域众所周知的可预见的困境。对我来说,这似乎是更清洁的选择。
【问题讨论】:
-
我可能会将查询放在类的函数中,然后在构造函数中调用它,这样构造函数方法本身就不会变得杂乱无章。虽然这是一个非常主观的问题......这并不重要。它基于您自己的风格偏好。我认为制作一个方法是最易读的,但其他人可能不同意。
-
这取决于您的设计。如果您需要能够创建不总是来自数据库的实例,那么它应该与构造函数分开。如果类必须绑定到数据库,请在构造函数中进行。
-
你说你知道 mysql_query 已被弃用。我是否应该理解这意味着您不能使用其他任何东西?
-
在回答这个问题之前,您应该远离
mysql_函数并准备好您的查询,而不是直接将字符串注入SQL 字符串。我无法抗拒这种冲动:当你手头有这个大问题时,你为什么还要担心建筑选择? -
请提供您的 PM 的联系方式。
标签: php mysql oop constructor