As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center作为指导。
                            
                        
                    
                
                                6年前关闭。
            
                    
我的问题是:如果我基于MySQL中的数据在PHP中创建对象,是不是我会双重存储数据并因此浪费资源并减慢我的应用程序速度?


人们是否只是为了将MySQL数据作为对象进行缓存而这样做,因为用户每次切换到新产品时都不会查询数据库,因此可以加快访问速度?
他们只是为不太复杂的代码这样做吗?
在小型MVC中处理此问题的适当方法是什么?即,在会话开始时,模型是否应创建所有产品的阵列?应该永远不会有所有产品的数组,而是每次都询问数据库并将数据每次转换为新的Product对象吗?


如果您愿意,可以继续阅读我问的原因...

我知道这与我的应用程序的大小无关紧要,但是我想从头开始。
我有一个基本的MVC,还有一个我们称为产品的项目数据库。为了方便起见,仅尝试确定是否/何时/何地从MySQL数据转换为PHP对象。

这是我的文件树的样子:

root
    controller
        Controller.php
    model
        Model.php
        Product.php
    view
        Products.php
        Product.php
    index.php


这是相关代码:

// Controller.php
if (!isset($_GET['product'])) {
    - getProducts() && include view/Products
} else {
    - getProduct('product') && include view/Product
}

// Model.php
getProducts() {
    while($row = $stmt->fetch_assoc()) {
        $array[$i] = new Product($row["id"], $row["name"], $row["price"]);
        $i++;
    }
    return $array;
}
getProduct($id) {
    $allProducts = $this->getProducts();
    return $allProducts[$id];
}

// Products view
<?php foreach ($products as $product): ?>
    display $product->id and $product->name
<?php endforeach; ?>

// Product view
display $product->name and $product->description and $product->price ...

最佳答案

从技术上讲,它确实将数据库中的数据复制到内存中,但是以与在餐馆读取菜单相同的方式将菜单项复制到您自己的内存中。没有办法将数据库中的数据使用或处理,而无需将其读入内存以供使用该脚本的脚本使用该数据,就像没有从菜单中将某些内容暂时保存在自己的内存中一样,也无法通过菜单进行排序。而且,就像您在餐后可能还不记得大多数菜单一样-在您不再需要它之后便忘记了-脚本完成执行后,PHP将不会在内存中保存任何内容,因为整个VM会在执行完一次操作后销毁脚本结束。

最好不要将数据读到不需要的内存中,例如,查找所需的一条用户记录,而不是整个用户表。您必须进行自己的基准测试来评估自己的特定情况,但是一般而言,最好不要重复执行小型查询(使用具有良好索引的WHERE子句)来仅检索所需的数据,而不是执行大型查询可检索您可能需要或不需要的大量数据。

07-28 02:48
查看更多