You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP构造方法定义默认值为数组的属性时如何减少重复代码?

方案1:使用PHP数组简写语法(适配PHP 5.4及以上版本)

直接把所有array()替换为PHP支持的短数组语法[],就能直接缩短一半的默认值代码长度,同时完全保留你现在用的构造器属性提升写法:

class User {
    public function __construct(
        private $groupData = [],
        private $nameData = [],
        private $nameSData = [],
        private $OData = [],
        private $uwoData = [],
        private $lReq = [],
        private $lReqB = [],
        private $lReqC = [],
        private $nameMData = [],
        private $typeData = [],
        private $equipamiento = [],
        private $equip = [],
        private $brandData = [],
        private $provData = [],
        private $typeData2 = [],
        private $lSol = [],
        private $lSolP = [],
        private $officS = [],
        private $officeG = [],
        private $lReqFO = [],
        private $reporta_fallo = [],
        private $rFallo = [],
        private $lFalloFO = [],
        private $sTypeData = [],
        private $equipFID = [],
        private $lReqPFO = [],
        private $lFalloPFO = [],
        private $lEquipFO = [],
        private $lSolSP = [],
        private $lSolS = [],
        private $lSolFID = [],
        private $lReqCID = [],
        private $OSData = [],
        private $equipFAO = [],
        private $officeFS = [],
        private $lReqSA = [],
        private $lReqA = [],
        private $lTypeFID = [],
        private $lReqCA = [],
        private $lTypeS = [],
        private $depData = [],
        private $lNext = [],
        private $lReqBA = []
    ) {}
}
方案2:使用公共属性容器(大幅减少代码量)

如果这些属性都是普通业务存储字段,不需要单独做特殊逻辑限制,完全可以收敛到一个数组成员里,不需要逐个声明属性:

class User {
    // 所有数组属性统一存储在容器中
    private array $attributes = [];

    public function __construct(array $attributes = [])
    {
        $this->attributes = $attributes;
    }

    // 统一读取属性,不存在自动返回空数组
    public function getAttribute(string $name): array
    {
        return $this->attributes[$name] ?? [];
    }

    // 统一设置属性
    public function setAttribute(string $name, array $value): self
    {
        $this->attributes[$name] = $value;
        return $this;
    }
}

使用时调用$user->getAttribute('groupData')即可获取对应值,没有赋值的属性会自动返回空数组,不需要额外判断。

方案3:类型属性声明默认值(适配PHP 7.4及以上版本)

如果你需要保留单独的属性声明,也可以把默认值放在属性声明阶段,构造函数里只放需要主动传参覆盖的参数即可:

class User {
    // 所有属性声明时直接设置默认空数组
    private array $groupData = [];
    private array $nameData = [];
    private array $nameSData = [];
    // 其他属性以此类推...

    public function __construct(
        // 构造函数里只写需要外部传参修改的属性即可,不需要改默认值的不用声明
        ?array $groupData = null,
        ?array $nameData = null
    ) {
        if ($groupData !== null) $this->groupData = $groupData;
        if ($nameData !== null) $this->nameData = $nameData;
    }
}

内容的提问来源于stack exchange,提问作者GLPG35

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 17:54:04