<?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 的修改?
如果您需要在不冒修改风险的情况下使用只读属性的值,则可以直接使用值或创建数据副本。
试试这个:
public function doThing(){
$values = [
'one' => $this->setOne, // Use value directly
'two' => $this->setTwo,
];
// Now loop over $values and work with the data
}