PHP Readonly 属性不能通过引用传递?

问题描述 投票:0回答:1
<?php

declare(strict_types=1);

class Example {
    public readonly array $setOne;
    public readonly array $setTwo;

    public function __construct()
    {
        // Populate $setOne and $setTwo with a lot of data
    }

    public function doThing()
    {
        $map = [
            'one' => &$this->setOne,
            'two' => &$this->setTwo,
        ];

        // Loop over the Map and evaluate the data
        // Take action on the data, but don't try to change it
    }
}

当我尝试在 PHP >=8.1 中创建只读属性的 reference 时,我收到错误

Fatal error: Uncaught Error: Cannot modify readonly property
。如果我尝试执行类似
unset($map['one'][0]);
之类的操作,这是有意义的。但是,我仅通过创建引用就收到此错误。

为什么创建引用被视为 PHP 的修改?

php pass-by-reference readonly php-8.1
1个回答
0
投票

如果您需要在不冒修改风险的情况下使用只读属性的值,则可以直接使用值或创建数据副本。
试试这个:

public function doThing(){
  $values = [
    'one' => $this->setOne, // Use value directly
    'two' => $this->setTwo,
  ];

// Now loop over $values and work with the data
}
© www.soinside.com 2019 - 2024. All rights reserved.