没有开启控制器复用,内存常驻使得静态属性也是保存吗?

renji566

问题描述

没有开启控制器复用,内存常驻使得静态属性也是保存吗?

每次请求count都会加一,是因为内存常驻,类文件加载进内存不会销毁,所以使得跟随类文件的静态的类属性一直保留在内存中吗?

<?php

namespace app\controller;

use support\Request;

class IndexController
{

    private static $count=0;

    public function index(Request $request){
       self::$count++;
       return self::$count;
    }

}
339 5 0
5个回答

故人重来

$count 你都声明了全局静态变量。当前是静态变量了,
至于你开启控制器文档都说明很清楚:
复用的话一个进程只new一次控制器,请求结束后不释放这个控制器实例,当前进程的后续请求会复用这个实例。复用控制器性能更好,但是不符合大部分开发者习惯。

不开启控制器复用方法里面的变量都是局部变量,用完就是销毁,不会常驻的。

  • renji566 15天前

    我的意思是请求结束后这个静态属性还在内存中是不是因为内存常驻不销毁内存中的类信息,因为普通PHP请求后,加载的信息都会销毁

walkor 打赏

所有类的静态属性一直保存在内存中,和控制器复用没有关系。

  • renji566 15天前

    就是和普通的PHP不一样的就是内存常驻然后请求结束后不会销毁这个类在内存中的信息,所以他是一直存在的

静态变量属于是PHP的基础知识,在类中定义的静态变量和脚本里面定义的静态变量区别就是作用域的不同,可以在PHP手册的类与对象的章节找到相关的解释。

  • renji566 15天前

    我的意思是请求结束后这个静态属性还在内存中是不是因为内存常驻不销毁内存中的类信息,因为普通PHP请求后,加载的信息都会销毁

  • nitron 15天前

  • 超高级的稻姬 14天前

    FPM的是一次请求全量加载所有需要用到的脚本,请求结束之后会销毁。webman的静态变量的保留当前进程的,所以只有重启进程这个变量才会重置

artisan

1.php的对象和静态变量在内存中的存储位置不同
2.对象用完后自动销毁(开启控制器复用会放到某个静态属性里,因而可以再拿出来用)
3.静态变量存在“全局数据区”,不会自动销毁/重建,程序结束后才会被释放/销毁(进程关闭)

  • 暂无评论
jack10082009

会常驻内存,但是注意不要不断追加数据导致数据溢出。

  • 暂无评论
🔝