PHP OOP从数据库中检索数据,初始化并回显它

时间:2013-01-26 20:43:25

标签: php oop initialization echo data-retrieval

大家好我需要你的建议是关于下面的编码方式是否可以接受,以及用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);
}

2 个答案:

答案 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