【问题标题】:PHP OOP retrieve data from database, initializing it and echo-ing it [closed]PHP OOP从数据库中检索数据,初始化它并回显它[关闭]
【发布时间】:2013-01-10 13:45:12
【问题描述】:

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

【问题讨论】:

  • mysql_* 函数真的不能再接受了,这是第一个

标签: php oop initialization echo data-retrieval


【解决方案1】:

您唯一需要担心的是数据库处理。尝试 PDO 而不是 mysql_* 函数。关注此tutorial。就这样。除此之外,我觉得其他一切都很好。

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

【讨论】:

  • 我想要实现的是通过在 SQL SELECT 上添加 LIMIT 10 在我的 index.php 页面上加载 10 个最新产品。我不太确定哪个更好,一个单独的功能还是在构造函数上。无论如何,谢谢,我会调查一下。
【解决方案2】:

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

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

$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

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

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

HTH

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-02-21
    • 1970-01-01
    • 1970-01-01
    • 2015-12-13
    • 1970-01-01
    • 2015-06-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多