定义一个公共的模型继承类,看了文档说使用过多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);
}
}
文档里明确表示“static关键字的数组”,static数组使用不当,会导致数据无限膨胀然后引起内存泄露,这是写代码人的问题!和静态方法那是两码事!
感谢大佬
文档没有说过
使用过多static会造成内存泄漏
,只是提示使用static数组时注意不要无限添加数据。业务发生内存泄露几率很低,基本不用考虑。即使发生webman也会再适当的时候自动平滑重启对应进程,不影响业务。
感谢大佬