Trong đoạn mã sau:Sử dụng SplObjectStorage làm bản đồ dữ liệu, bạn có thể sử dụng mảng có thể thay đổi làm dữ liệu không?
$storage = new \SplObjectStorage();
$fooA = new \StdClass();
$fooB = new \StdClass();
$storage[$fooA] = 1;
$storage[$fooB] = array();
$storage[$fooA] = 2;
$storage[$fooB][] = 'test';
Tôi mong chờ $storage[$fooA]
là 1
, mà nó được. Tôi cũng mong đợi $storage[$fooB]
là array('test')
, không phải như vậy. Điều này cũng kích hoạt thông báo cho biết, "Sửa đổi gián tiếp phần tử quá tải của SplObjectStorage không có hiệu lực trong ..."
Tôi nghĩ điều này xảy ra vì việc thực hiện ArrayAccess
trong SplObjectStorage
không trả lại giá trị theo tham chiếu.
Có cách nào để sử dụng SplObjectStorage
làm bản đồ dữ liệu trong đó khóa là đối tượng và giá trị là mảng có thể thay đổi không? Có bất kỳ lựa chọn khả thi nào khác để thực hiện loại công việc này không?