cari

Rumah  >  Soal Jawab  >  teks badan

Bilakah __destruct dilaksanakan dalam thinkphp5?

<?php
namespace app\shop\drive;
kelas Redis {
    $pengendali awam;
    fungsi awam __construct(){
        $redis = baru \Redis();
        $redisConf = config('cache.redis');
        $redis->connect($redisConf['host'], $redisConf['port']);
        $redis->auth($redisConf['kata laluan']);
        $ini->pengendali = $redis;
    }

    fungsi awam __destruct(){
        $ini->pengendali->tutup();
    }
}

Dalam pengawal

... awam $redis, $prefix; fungsi dilindungi _initialize(){ $this->initRedis(); var_dump($this->redis->info()); //Ralat, sambungan redis telah ditutup } fungsi peribadi initRedis() { $redis = Redis baharu; $ini->redis = $redis->pengendali; var_dump($this->redis->info()); //Normal $this->prefix = config('cache.redis')['prefix']; }

1. Apakah sebabnya?
2. Adakah perlu menutup sambungan redis secara manual?

世界只因有你世界只因有你2861 hari yang lalu473

membalas semua(1)saya akan balas

  • 巴扎黑

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

    Kaedah

    __destruct() dilaksanakan apabila objek dimusnahkan

    public $redis, $prefix;
        protected function _initialize(){
            $this->initRedis();    //在initRedis()方法中实例Redis对象,当此方法执行完毕,实例出来的Redis对象就会被销毁,同时会执行Redis类中的__destruct方法,redis连接被关闭
            var_dump($this->redis->info()); //此时initRedis已经执行完毕,redis连接也已经被关闭
        }
        private function initRedis()
        {
            $redis = new Redis;
            $this->redis = $redis->handler;
            var_dump($this->redis->info()); //正常
            $this->prefix = config('cache.redis')['prefix'];
        }

    Dalam PHP, selepas fungsi atau kaedah dilaksanakan, pembolehubah dalamannya akan dimusnahkan (kecuali pembolehubah statik oleh itu, pembolehubah $redis akan dimusnahkan selepas initRedis dilaksanakan, dan _ dalam kelas Redis akan dilaksanakan. ) kaedah, walaupun jika anda memberikan pemegang kepada atribut redis, sambungan redis telah ditutup dalam __destruct()

    balas
    0
  • Batalbalas