-2

大家好,我需要您就以下编码方式是否可以接受以及在 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);
}
4

2 回答 2

0

您唯一需要担心的是数据库处理。尝试 PDO 而不是 mysql_* 函数。按照本教程。就这样。除此之外,其他一切对我来说似乎都很好。

每次创建$product = new Product();数据库查询时都会运行最后一件事。我的问题是强制性的吗?你能把它放在一个单独的函数中吗?这样当您需要它时,您可以调用它并获取数据。

于 2013-01-26T20:50:15.350 回答
0

我不太喜欢你的班级命名。你称它为 Product 但它实际上是 ProductCollection 或类似的。事实上,如果您愿意,它会与特定类型的 ProductCollection、OpenProductCollection 或 OpenProducts 相关联。

如果您想要 ClosedProducts 或数据库中可能已在 product_status 中设置的其他状态怎么办?

$pc = new ProductsCollection('open');

当您只需要时使用“SELECT * FROM product ...”name似乎也很浪费,或者如果每个产品有 100 个字段......我们不知道您有多少个字段。

所以你可能想做相当于:

$pc = new ProductsCollection;
$pc->set_fields(array('id', 'name'));
$pc->get_status_open();  // return your array

您可以考虑使用魔术 __get 和 __set 作为解决此问题的另一种方法,否则您可以使用 get_name、get_price、get_manufacturer 等将您的类与您的表紧密联系起来。

关于 mysql_* 函数的备注,如果您移至 mysqli 或 PDO,您还可以选择 OBJECT,因此您的结果集可以是预填充的 Product 对象数组。(即您编写的代表单个产品的产品类)。

高温高压

于 2013-01-26T21:33:42.880 回答