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

PHP类内部如何使用数组值?为何类内赋值报错类外正常?

PHP类内部使用数组值的问题解析

错误原因

PHP规定,类的属性(包括静态属性)在声明阶段只能使用常量表达式初始化,不能依赖其他类属性的运行时求值结果。你第一个代码里的self::$arr1['key1']属于运行时表达式(需要访问已初始化的类属性并取数组索引),不符合初始化规则,因此报错。

而第二个代码是在类外部赋值,此时类已经完成加载,MyClass::$arr1已经可用,自然能正常访问。

解决方案

方案1:使用静态初始化方法

通过手动调用静态方法,在类加载完成后初始化依赖其他属性的数组:

<?php
class MyClass{
    public static $arr1 = [
        'key1' => "myString",
        'key2' => "aaaa"
    ];
    
    public static $arr2;

    // 静态初始化方法
    public static function init() {
        self::$arr2 = [
            'key' => self::$arr1['key1']    
        ];
    }
}

// 调用初始化方法完成赋值
MyClass::init();

// 正常访问
echo MyClass::$arr2['key']; // 输出 myString

方案2:提取常量复用

如果数组中的值是固定的,可以先定义类常量,再用常量初始化两个数组:

<?php
class MyClass{
    const KEY1 = "myString";
    
    public static $arr1 = [
        'key1' => self::KEY1,
        'key2' => "aaaa"
    ];
    
    public static $arr2 = [
        'key' => self::KEY1    
    ];
}

echo MyClass::$arr2['key']; // 输出 myString

方案3:使用构造函数(非静态属性场景)

如果是非静态属性,可以在构造函数中初始化依赖值:

<?php
class MyClass{
    public $arr1 = [
        'key1' => "myString",
        'key2' => "aaaa"
    ];
    
    public $arr2;

    public function __construct() {
        $this->arr2 = [
            'key' => $this->arr1['key1']    
        ];
    }
}

$obj = new MyClass();
echo $obj->arr2['key']; // 输出 myString

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 16:30:58