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始终返回同一个实例,是常驻内存的。
是类似这么写的,在控制器里用的话测试不会常驻内存。第二次调用就清掉了。
你怎么判断清掉了?我的理解是webman是多进程的,第一个请求分配到了A进程,出初始化了实例。第二个请求可能分配给了B进程,B进程可能还没初始化实例。
对,我没考虑到这个。我重新试了确实是线程原因。 那有没办法做成各个线程共用的。如果其中一个线程改了。另一个线程拿到数据就不一样了。
好像做不到。进程间的数据是隔离的,不是共享的。共享的话编码又需要做锁什么的访问编程会很复杂吧
嗯,好的。你讲得没错。谢谢
用的时候就
getinstance始终返回同一个实例,是常驻内存的。
是类似这么写的,在控制器里用的话测试不会常驻内存。第二次调用就清掉了。
你怎么判断清掉了?我的理解是webman是多进程的,第一个请求分配到了A进程,出初始化了实例。第二个请求可能分配给了B进程,B进程可能还没初始化实例。
对,我没考虑到这个。我重新试了确实是线程原因。
那有没办法做成各个线程共用的。如果其中一个线程改了。另一个线程拿到数据就不一样了。
好像做不到。进程间的数据是隔离的,不是共享的。共享的话编码又需要做锁什么的访问编程会很复杂吧
嗯,好的。你讲得没错。谢谢