<?php
namespace app\shop\drive;
class Redis {
public $handler;
public function __construct(){
$redis = new \Redis();
$redisConf = config('cache.redis');
$redis->connect($redisConf['host'], $redisConf['port']);
$redis->auth($redisConf['password']);
$this->handler = $redis;
}
public function __destruct(){
$this->handler->close();
}
}
控制器中
...
public $redis, $prefix;
protected function _initialize(){
$this->initRedis();
var_dump($this->redis->info()); //出错,redis连接已关闭
}
private function initRedis()
{
$redis = new Redis;
$this->redis = $redis->handler;
var_dump($this->redis->info()); //正常
$this->prefix = config('cache.redis')['prefix'];
}
1、這是啥原因?
2、有必要手動關閉redis連線嗎?
__destruct()方法是當物件被銷毀時執行
php中,函數或方法執行完畢,其內部的變數在其執行完畢後都會被銷毀(靜態變數除外),因此,在initRedis執行完畢後會銷毀$redis變量,此時會執行Redis類別中的_ _destruct()方法,就算你把handle賦給了redis屬性,但是redis連線已經在__destruct()中關閉了