찾다

 >  Q&A  >  본문

thinkphp5에서 __destruct는 언제 실행되나요?

<코드><?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 연결을 수동으로 종료해야 합니까?

世界只因有你世界只因有你2827일 전452

모든 응답(1)나는 대답할 것이다

  • 巴扎黑

    巴扎黑2017-05-16 13:13:43

    __destruct() 메서드는 객체가 파괴될 때 실행됩니다

    으아악

    PHP에서는 함수나 메소드가 실행된 후 내부 변수가 소멸됩니다(정적 변수 제외). 따라서 $redis 변수는 initRedis가 실행된 후 소멸되며 Redis 클래스의 _destruct( ) 메서드, redis 속성에 핸들을 할당하더라도 __destruct()

    에서 redis 연결이 닫혔습니다.

    회신하다
    0
  • 취소회신하다