thinkphp5 で __destruct はいつ実行されますか?
世界只因有你
世界只因有你 2017-05-16 13:11:43
0
1
444
<?php
名前空間 app\shop\drive;
クラス Redis {
    パブリック $ハンドラー;
    パブリック関数 __construct(){
        $redis = 新しい \Redis();
        $redisConf = config('cache.redis');
        $redis->connect($redisConf['host'], $redisConf['port']);
        $redis->auth($redisConf['パスワード']);
        $this->ハンドラー = $redis;
    }

    パブリック関数 __destruct(){
        $this->handler->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 接続を手動で閉じる必要がありますか?

世界只因有你
世界只因有你

全員に返信(1)
巴扎黑

__destruct() メソッドは、オブジェクトが破棄されるときに実行されます

リーリー

PHPでは、関数やメソッドの実行後、その内部変数が破棄されます(静的変数を除く)。そのため、initRedisの実行後に$redis変数が破棄され、Redisクラスの_destruct(が実行されます)。 ) メソッドで、redis 属性にハンドルを割り当てても、__destruct() で Redis 接続が閉じられています

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート