定义公共模型,使用static。是否有内存泄漏问题(webman)

hunma

问题描述

定义一个公共的模型继承类,看了文档说使用过多static会造成内存泄漏。这样写会遇到内存泄漏或者是其他的问题吗

代码

公共代码
<?php

namespace ceshi\basic;

use think\db\Query;
use think\Model;
use think\model\concern\SoftDelete;

/**
 * 基础模型类
 * 提供通用的数据库操作方法
 */
class BaseModel extends Model
{
    // 使用软删除功能
    use SoftDelete;
    protected $deleteTime = 'delete_time';

    /**
     * 统一ID数据更新
     * @param array $data 更新数据,必须包含 id
     * @return bool
     * @throws \Exception
     */
    public static function edit(array $data): bool
    {
        self::validateId($data);

        $model = self::findOrFail($data['id']);
        return $model->save($data);
    }

    /**
     * 获取分页列表
     * @param array $where 查询条件
     * @param array $order 排序规则
     * @param string $field 查询字段
     * @param int $page 当前页码
     * @param int $limit 每页条数
     * @param string $group 分组字段
     * @return array
     */
    public static function getList(array $where = [], array $order = ['id' => 'DESC'], string $field = '*', int $page = 1, int $limit = 10, string $group = ''): array
    {
        $query = self::buildQuery($where, $order, $field, $group);
        return $query->page($page, $limit)->select()->toArray();
    }
}
继承公共
<?php
namespace app\model\sys;

use ceshi\basic\BaseModel;

class SysUserModel extends BaseModel{

    protected $table = 'sys_user';
}
调用
<?php
namespace app\test\controller;

use app\model\sys\SysUserModel;
use hunma\basic\ApiResponse;
use hunma\basic\BaseController;

class TestBaseModelController extends BaseController
{
    public function success(){
        $data = SysUserModel::find(1);
        return ApiResponse::success($data);
    }
}
203 2 0
2个回答

zhizun

文档里明确表示“static关键字的数组”,static数组使用不当,会导致数据无限膨胀然后引起内存泄露,这是写代码人的问题!和静态方法那是两码事!

文档没有说过 使用过多static会造成内存泄漏,只是提示使用static数组时注意不要无限添加数据。
业务发生内存泄露几率很低,基本不用考虑。即使发生webman也会再适当的时候自动平滑重启对应进程,不影响业务。

×
🔝