これはあなたが求めていることをします:
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によるこのペーパーを参照してください。