【发布时间】:2013-04-30 10:34:53
【问题描述】:
我想要一个绑定到应用程序范围的变量,(在 java 中是应用程序范围)。
我认为服务应该是为了实现我的目标而使用的东西。
我创建了一个服务测试
<?php
namespace Acme\MyBundle\Service;
class test {
public $count;
public function __construct() {
$this->count = 0;
}
public function addCount() {
$this->count++;
}
}
我在 services.yml 中声明的
acme.my.service.test:
class: Acme\MyBundle\Service\test
我在控制器中调用它
public function testAction() {
$this->get('acme.my.service.test')->addCount();
return $this->render('AcmeMyBundle:Test:test.html.twig');
}
但是当我在我的树枝中检索它时,无论我刷新多少次或在绑定到我的 testAction 的 url 上使用多个会话,它的值都是 1。 => 表示每次都会调用构造函数。
那么这是正确的做法吗?我以为服务是创建一次然后重用的,但我可能弄错了。
请教教我好吗?
谢谢, 无名氏
【问题讨论】:
-
service are stateless, "reused" 意味着你总是从 DIC 中检索相同的实例
-
如果它是无状态的,那么它就不是同一个实例了,是吗?
-
您是否尝试将计数保存到用户的会话中?或者如果计数器在用户之间使用,则到数据库。
-
我会选择数据库解决方案,因为它是跨用户的。但我认为会有更优雅的方式。 (如果您希望我验证,您可以将其发布为答案)
-
我想指出 PHP 本质上是无状态的,因为每次有新请求进来时,Web 服务器都会启动 PHP 解释器,它会解释你的代码,然后吐出一些 html出去。在请求之间持久化相关数据是开发人员的责任。