首页 > 解决方案 > Symfony 服务工厂正常失败的正确方法是什么?

问题描述

Symfony 的服务工厂文档解释了如何允许服务容器使用工​​厂实例化服务,但没有解释当创建失败时推荐的最佳实践是什么,即当服务由于某种原因不可用时。

例如; 想象一个 Redis 内存缓存服务。在工厂类中,您有一个将实例化并返回 Redis 客户端对象的方法;

public function createRedisClient() {
  $redis = new \Redis();
  $connectionResult = $redis->connect($host, $port);

  return $redis;
}

如果 Redis 服务器暂时不可用,并且我希望能够优雅地回退到另一个解决方案来存储我们拥有的任何数据,工厂应该返回null,抛出某种特定类型的异常,还是根本不关心可用性?

标签: phpsymfonyservicecontainersgraceful-degradation

解决方案


您可以使用 PHP 的is_object方法:

    public function createRedisClient() {
      $redis = new \Redis();
      $connectionResult = $redis->connect($host, $port);
      if (!is_object($redis)) {
        return false;
      }
      return $redis;
}

返回值:

如果 var 是一个对象,则返回TRUE,否则返回 FALSE。

参考:PHP is_object


推荐阅读