如何在赋值时为向前引用的变量前置字符串?
解决方案
场景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
相关产品推荐
相关产品推荐

