大家好我需要你的建议是关于下面的编码方式是否可以接受,以及用3种方法编写代码的更好方法,检索数据,初始化变量和回应它。
class Product {
private $product_name = array();
private $num_rows;
public function __construct() {
include 'connect.php';
$query = "SELECT * FROM product where product_status= 'open' ";
$result = mysql_query($query);
$this->num_rows = mysql_num_rows($result);
while ($record = mysql_fetch_array($result)) {
$this->product_name[] = $record['product_name'];
}
}
public function get_rows() {
return $this->num_rows;
}
public function get_name($count) {
return $this->product_name[$count];
}
}
$product = new Product();
$rows = $product->get_rows();
for ($i = 0; $i < $rows; $i++) {
echo $product->get_name($i);
}
答案 0 :(得分:0)
唯一需要担心的是数据库处理。尝试PDO而不是mysql_ *函数。请遵循此tutorial。就这样。除此之外,其他一切似乎都很好。
每次创建$product = new Product();
数据库查询时,最后一件事都会运行。我的问题是强制性的吗?你能把它放在一个单独的功能中吗?因此,当您需要它时,您可以调用它并获取数据。
答案 1 :(得分:0)
我不喜欢你的课程命名。您将其称为产品,但实际上它是ProductCollection或类似产品。实际上,如果您愿意,它与特定类型的ProductCollection,OpenProductCollection或OpenProducts相关联。
如果您想要在数据库中的product_status中设置ClosedProducts或其他一些状态,该怎么办?
$pc = new ProductsCollection('open');
当你只想要name
时,你使用'SELECT * FROM product ...'似乎也很浪费,或者如果每个产品都有100个字段......我们不知道你有多少个字段
所以你可能想做相同的事情:
$pc = new ProductsCollection;
$pc->set_fields(array('id', 'name'));
$pc->get_status_open(); // return your array
您可以使用magic __get和__set作为另一种方法来解决这个问题,否则您可以使用get_name,get_price,get_manufacturer等将您的类紧密地绑定到您的表中。
关于mysql_ *函数的注释,如果移动到mysqli或PDO,也可以选择SELECT到OBJECT,因此结果集可以是预填充的Product对象的数组。 (即您编写的代表单个产品的Product类。)
HTH