Symfony2:查找函数中的对象vs将对象传递给函数

时间:2017-03-10 17:27:25

标签: php symfony symfony-2.3

我在Symfony2中有一个修改对象的函数。该函数可以通过两种方式之一接收对象。首先,可以将对象传递给函数,如下所示:

public function myFunction(Object $myObject)
    {
        // Do something with $myObject
    }

或者,可以将对象id(或任何其他属性)传递给函数并用于在函数中查找对象,如下所示:

public function myFunction($id)
    {
        $myObject = $this->entityManager->getRepository('AppBundle\Entity\Object')->find($id);
        // Do something with $myObject
    }

从功能上讲,这两种方法是等价的。我的问题是,这两种方法对应用程序性能的影响有何不同?我知道应该最小化数据库查询的数量以优化性能。那么,额外find()的性能成本如何? 查询与将对象传递给函数的性能成本进行比较?

1 个答案:

答案 0 :(得分:1)

将对象传递给函数将始终具有更高的性能。由于PHP5对象are passed by object identifier, very similar in concept to pass by reference

也就是说,从数据库中检索单个原始数据记录的速度相对较快。根据我的经验,水化(将从数据库中检索到的关系数据转换为它的映射业务对象)是您发现瓶颈的地方。 Doctrine的首席开发人员Marco Pivetta撰写了excellent post about this

一般来说,在正常情况下,您可能会发现传递物体和保湿单个物体之间的性能没有差异。然而,在循环中保湿是您遇到麻烦的地方。对象越复杂,水合的数据越多,性能越差。