<?php
名前空間 app\shop\drive;
クラス Redis {
パブリック $ハンドラー;
パブリック関数 __construct(){
$redis = 新しい \Redis();
$redisConf = config('cache.redis');
$redis->connect($redisConf['host'], $redisConf['port']);
$redis->auth($redisConf['パスワード']);
$this->ハンドラー = $redis;
}
パブリック関数 __destruct(){
$this->handler->close();
}
}
コントローラ内
...
パブリック $redis、$prefix;
保護された関数 _initialize(){
$this->initRedis();
var_dump($this->redis->info()); //エラー、redis 接続が閉じられました。
}
プライベート関数 initRedis()
{
$redis = 新しい Redis;
$this->redis = $redis->ハンドラー;
var_dump($this->redis->info());
$this->prefix = config('cache.redis')['prefix'];
}
1. 理由は何ですか?
2. Redis 接続を手動で閉じる必要がありますか?
__destruct() メソッドは、オブジェクトが破棄されるときに実行されます
リーリーPHPでは、関数やメソッドの実行後、その内部変数が破棄されます(静的変数を除く)。そのため、initRedisの実行後に$redis変数が破棄され、Redisクラスの_destruct(が実行されます)。 ) メソッドで、redis 属性にハンドルを割り当てても、__destruct() で Redis 接続が閉じられています