我创建了新的连接mongoDB的类,它是一个单例类。
我是否已在服务中转换此类?
何时使用服务而不是类?
服务已经是Singleton吗?
我的服务是
class MongoDB
{
private $dbname;
private $url;
private $db;
/**
* MongoDB constructor.
* @param $dbname
* @param $url
*/
public function __construct($dbname,$url)
{
$this->dbname = $dbname;
$this->url = $url;
}
public function getMongoCon()
{
if ($this->db === null)
{
try {
$connection = new \MongoClient($this->url);
$this->db = $connection->selectDB($this->dbname);
} catch (\MongoConnectionException $e) {
die('Failed to connect to MongoDB '.$e->getMessage());
}
$this->db = $connection;
}
return $this->db;
}
}
答案 0 :(得分:4)
让我们一点一点地看待它们:
我是否已在服务中转换此类?
不,你没有拥有。在典型的用例中,建议使用它,因为您可能需要将其注入其他服务,这意味着它需要是一个服务才能注入。
何时使用服务而不是类?
这两个案例中有99%不相互排斥。服务由其类定义,可以/必须传递给其构造函数的参数(例如,它的依赖项),标签等。或者它可以是工厂服务或抽象服务或Symfony提供的任何其他类型。
服务已经是Singleton吗?
是和否。服务不会自动成为单身人士。除非通过范围明确指定(自2.8以来已弃用并在3.0中删除),否则服务仅在Symfony的容器中实例化一次。任何后续的检索尝试都会反复返回相同的实例。
我建议您阅读更多有关依赖注入以及如何在Symfony中实现的内容。它基本上是整个框架的核心和核心。一旦你理解了这个部分,关于框架的其他一切将更容易掌握;)。
PS:你没有正确实现Singleton模式。