<코드><?php 네임스페이스 app\shop\drive; 클래스 Redis { 공개 $ 핸들러; 공개 함수 __construct(){ $redis = 새로운\Redis(); $redisConf = config('cache.redis'); $redis->connect($redisConf['host'], $redisConf['port']); $redis->auth($redisConf['password']); $this->핸들러 = $redis; } 공개 함수 __destruct(){ $this->핸들러->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 연결을 수동으로 종료해야 합니까?
巴扎黑2017-05-16 13:13:43
__destruct() 메서드는 객체가 파괴될 때 실행됩니다
으아악PHP에서는 함수나 메소드가 실행된 후 내부 변수가 소멸됩니다(정적 변수 제외). 따라서 $redis 변수는 initRedis가 실행된 후 소멸되며 Redis 클래스의 _destruct( ) 메서드, redis 속성에 핸들을 할당하더라도 __destruct()
에서 redis 연결이 닫혔습니다.