这将满足您的要求:
class Test {
private $storage;
public function __construct(array &$storage)
{
$this->storage = &$storage;
}
public function fn()
{
$this->storage[0] *= 10;
}
}
$storage = [1];
$a = new Test($storage);
$b = new Test($storage);
$a->fn();
print_r($a); // $storage[0] is 10
print_r($b); // $storage[0] is 10
$b->fn();
print_r($a); // $storage[0] is 100
print_r($b); // $storage[0] is 100
备选方案 1
除了使用数组,您还可以使用ArrayObject
,ArrayIterator
或SplFixedArray
。由于这些是对象,它们将通过引用传递。所有这些实现ArrayAccess
,因此您可以通过方括号访问它们,例如
$arrayObject = new ArrayObject;
$arrayObject['foo'] = 'bar';
echo $arrayObject['foo']; // prints 'bar'
备选方案 2
不要使用泛型类型,而是使用专用类型。找出您在该数组中存储的内容。是Config
吗?一个Registry
?一个UnitOfWork
?找出它到底是什么。然后让它成为一个对象,并给它一个反映职责的 API。然后注入该对象并通过该 API 访问它。
有关何时制作类型的一些指导,请参阅 Martin Fowler 的这篇论文