Rumah > Soal Jawab > teks badan
<?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
1. Apakah sebabnya?
2. Adakah perlu menutup sambungan redis secara manual?
巴扎黑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()