Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/240.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用Symfony2服务的最佳方式是什么_Php_Symfony_Instance - Fatal编程技术网

Php 使用Symfony2服务的最佳方式是什么

Php 使用Symfony2服务的最佳方式是什么,php,symfony,instance,Php,Symfony,Instance,我有一个巨大的Symfony项目。我创建了许多服务和子服务来完善控制器和服务代码 在我的代码中,我用以下代码实例化这些服务: $this->get('MyServiceName')->myMethod($foo); 我的一位同事使用new关键字来实例化该类: $myservice = new Service(); $refid = $myservice->mymethod($foo); 所以我想知道,这是最佳实践吗?我应该重写代码吗?这类代码对应用程序的可

我有一个巨大的Symfony项目。我创建了许多服务和子服务来完善控制器和服务代码

在我的代码中,我用以下代码实例化这些服务:

$this->get('MyServiceName')->myMethod($foo);
我的一位同事使用new关键字来实例化该类:

    $myservice = new Service();

    $refid = $myservice->mymethod($foo);
所以我想知道,这是最佳实践吗?我应该重写代码吗?这类代码对应用程序的可维护性和性能有什么影响?

我总是使用第一种方法,即使用服务容器,因为使用Symfony的依赖项注入,您不需要担心依赖项和/或参数;我从未使用过第二种方法,即用new关键字手动实例化服务,我很确定这是最糟糕的方法

顺便说一句,您应该查看和By Fabien Potentier。

我总是使用第一种方法,即使用服务容器,因为使用Symfony的依赖项注入,您不需要担心依赖项和/或参数;我从未使用过第二种方法,即用new关键字手动实例化服务,我很确定这是最糟糕的方法


顺便说一句,您应该查看Fabien Potentier的和。

如果服务是在Ioc容器中定义的,那么请务必从那里使用它,因为它将由容器构建。它负责从开发人员那里实例化新类。如果显式依赖项发生更改,您只需要在容器中更改它们,而不需要在整个项目代码中查找它们。在大多数情况下,这也有性能优势,因为有些类只需要实例化一次。无论如何,与你的同事谈谈,他为什么这样做。

如果服务是在Ioc容器中定义的,那么一定要从那里使用它,因为它将由容器构建。它负责从开发人员那里实例化新类。如果显式依赖项发生更改,您只需要在容器中更改它们,而不需要在整个项目代码中查找它们。在大多数情况下,这也有性能优势,因为有些类只需要实例化一次。无论如何,与你的同事谈谈,他为什么这样做。

在服务中,你可以传递条令、服务容器、路由器等依赖项。。在服务定义中使用一次,但每次都使用新的类方法,您必须手动传递依赖项。如果您的同事编写了代码,那么您应该首先与他们进行讨论。也许有一个很好的理由,他们使用new手动实例化服务真的违背了。此外,由于无法注入模拟服务,测试也变得更加困难。所以坚持第一个,而改变第二个用法。@FuzzyTree我已经这么做了,没有理由。他是Symfony的新成员,所以他以旧的方式编写代码。在服务中,您可以传递依赖项,如条令、服务容器、路由器等。。在服务定义中使用一次,但每次都使用新的类方法,您必须手动传递依赖项。如果您的同事编写了代码,那么您应该首先与他们进行讨论。也许有一个很好的理由,他们使用new手动实例化服务真的违背了。此外,由于无法注入模拟服务,测试也变得更加困难。所以坚持第一个,而改变第二个用法。@FuzzyTree我已经这么做了,没有理由。他是Symfony的新手,所以他用老方法写代码