webman 下如何实现一个自定义类常驻内存。

王吉松
843 1 0
1个回答

喵了个咪
class A{
    protected static $instance;
    public function __construct()
    {

    }
    public static function getInstance()
    {
        if (!self::$instance) {
            self::$instance = new self;
        }
        return self::$instance;
    }
}

用的时候就

$a = A::getinstanc();

getinstance始终返回同一个实例,是常驻内存的。

  • 王吉松 2021-09-29

    是类似这么写的,在控制器里用的话测试不会常驻内存。第二次调用就清掉了。

  • 喵了个咪 2021-09-29

    你怎么判断清掉了?我的理解是webman是多进程的,第一个请求分配到了A进程,出初始化了实例。第二个请求可能分配给了B进程,B进程可能还没初始化实例。

  • 王吉松 2021-09-29

    对,我没考虑到这个。我重新试了确实是线程原因。
    那有没办法做成各个线程共用的。如果其中一个线程改了。另一个线程拿到数据就不一样了。

  • 喵了个咪 2021-09-29

    好像做不到。进程间的数据是隔离的,不是共享的。共享的话编码又需要做锁什么的访问编程会很复杂吧

  • 王吉松 2021-09-29

    嗯,好的。你讲得没错。谢谢

🔝