首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不能在PHP中实例化同一个类两次

不能在PHP中实例化同一个类两次
EN

Stack Overflow用户
提问于 2017-05-04 21:15:48
回答 3查看 367关注 0票数 0

我有以下代码,我想通过传递$redisdb参数连接到2台服务器。不幸的是,第二个实例得到了第一个连接。

代码语言:javascript
复制
$redis = new RedisHandler();
    $redis2 = new RedisHandler('redis2'); //this one gets first $redis connection

我做错了什么?

代码语言:javascript
复制
class RedisHandler 
{ 
    static $db = null;
    public function __construct($redisdb = 'redis') {
        // opening db connection
        return self::connect($redisdb);
    }
    static public function connect($redisdb)
    {
        global $config;
        if (self::$db === null)
        {
            try {
                $redisClient = new Redis();
                $redisClient -> connect($config[$redisdb]['host'], $config[$redisdb]['port'], $config[$redisdb]['timeout'], null, $config[$redisdb]['reservedInterval'] );
                $redisClient->setOption(Redis::OPT_READ_TIMEOUT, 100);
                if (!$redisClient) { throw new Exception("Can't connect to Redis"); }
            } catch (Exception $e) {
                die('Failed to connect to Redis '.$e->getMessage());
            }
            self::$db = $redisClient;
            return self::$db;
            //return $m;
        }
        else
        {
           // return self::$db;
           return self::$db;
        }
    }
}
EN

回答 3

Stack Overflow用户

发布于 2017-05-04 21:18:49

RedisHandler类是基于单例模式开发的,即如果连接已经存在,则返回现有的连接,因此您将面临这个问题。

您可以使用并关闭第一个连接,然后使用第二个连接来解决问题。

票数 0
EN

Stack Overflow用户

发布于 2017-05-04 21:43:55

只要变量或函数成员与对象的当前实例无关,就会使用static关键字。

这是你的

代码语言:javascript
复制
static $db

对于每个RedisHandler实例都是相同的。

第一次实例化$db是空,但是在第二次实例化时,因为$db是静态代码,所以变量不会是空,所以您不能实例化另一个Redis,因为条件是if ( ===::$db===null)<>E212>

票数 0
EN

Stack Overflow用户

发布于 2018-07-06 04:35:44

我使用PHP和java来实例化产生excel文件的excel类。

$excel =新的Excel (...)

然后我想生成第二个文件。未设置和$excel = null不起作用。

它在以下情况下工作:

$excel = $excel->Excel (...)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43783958

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档