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

如何在赋值时为向前引用的变量前置字符串?

解决方案

场景1:不需要保持引用(仅一次性生成#TEST)

直接调整赋值顺序,先给$ref赋值,再拼接字符串后存入数组:

$ref = "TEST";
$array = [
    "key1" => [
        "subKey1" => "#" . $ref,
    ],
    "key2" => [
        "subKey2" => $ref,
    ],
];
print $array['key1']['subKey1']; // 输出:#TEST

场景2:需要保持引用($ref变化时subKey1同步更新)

如果希望后续修改$ref时,subKey1的值也自动带上#前缀更新,可以用一个简单的包装类实现:

class PrefixWrapper {
    private &$value;
    private $prefix;

    public function __construct(&$value, $prefix = "#") {
        $this->value = &$value;
        $this->prefix = $prefix;
    }

    public function __toString() {
        return $this->prefix . $this->value;
    }
}

$array = [
    "key1" => [
        "subKey1" => new PrefixWrapper($ref),
    ],
    "key2" => [
        "subKey2" => ($ref = "TEST"),
    ],
];
print $array['key1']['subKey1']; // 输出:#TEST

// 修改$ref后,subKey1会自动更新
$ref = "NEW_VALUE";
print $array['key1']['subKey1']; // 输出:#NEW_VALUE

原写法失效的原因

PHP不支持在表达式中直接对引用进行字符串拼接("#" . &$ref属于非法语法),因为引用本质是变量的别名,不能作为表达式的一部分直接参与运算。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 16:37:12