ArrayAccess в PHP - назначение смещения по ссылке

Во-первых, цитата из руководства по ole 'ArrayAccess::offsetSet():

Эта функция не вызывается в присваиваниях по ссылке и в противном случае косвенные изменения в измерениях массива перегруженыArrayAccess (косвенные в том смысле, что они создаются не путем непосредственного изменения измерения, а путем изменения подразмерения или дополнительного свойства или назначения размера массива посредством ссылки на другую переменную).Вместо,ArrayAccess :: offsetGet () называется. Операция будет успешной только в том случае, если этот метод вернется по ссылке, что возможно только с PHP 5.3.4..

Я немного смущен этим. Похоже, это говорит о том, что (по состоянию на 5.3.4) можно определитьoffsetGet() возвращать по ссылке в реализующий класс, таким образом обрабатывая назначения по ссылке.

Итак, теперь тестовый фрагмент:

(Не обращайте внимания на отсутствие проверки иisset() проверка)

class Test implements ArrayAccess
{
    protected $data = array();

    public function &offsetGet($key)
    {
        return $this->data[$key];
    }

    public function offsetSet($key, $value)
    {
        $this->data[$key] = $value;
    }

    public function offsetExists($key) { /* ... */ }

    public function offsetUnset($key) { /* ... */ }

}

$test = new Test();

$test['foo'] = 'bar';
$test['foo'] = &$bar; // Fatal error: Cannot assign by reference to
                      // overloaded object in

var_dump($test, $bar);    

Хорошо, так что это не работает. Тогда к чему относится это руководство?

причина
Я хотел бы разрешить назначение по ссылке через оператор массива для объекта, реализующегоArrayAccess, как показывает пример фрагмента. Я исследовал это раньше, и я не думал, что это было возможно, но вернувшись к этому из-за неопределенности, я (заново) обнаружил это упоминание в руководстве. Теперь я просто растерялся.

Обновить: Как я ударилОставьте свой вопросЯ понял, что это, скорее всего, просто относится к назначению по ссылкедругому переменная, такая как$bar = &$test['foo'];, Если это так, то извинения; хотя было бы хорошо знать, как, если это вообще возможно, назначать по ссылке на перегруженный объект.

Дальнейшая разработка: Все это сводится к тому, я хотел бы иметь следующие псевдонимы методов:

isset($obj[$key]);       // $obj->has_data($key);

$value = $obj[$key];     // $obj->get_data($key);

$obj[$key] = $value;     // $obj->set_data($key, $value);

$obj[$key] = &$variable; // $obj->bind_data($key, $variable);

// also, flipping the operands is a syntactic alternative
$variable = &$obj[$key]; // $obj->bind_data($key, $variable);

unset($obj[$key]);       // $obj->remove_data($key);

Так далеко какhas, get, set, а такжеremove иди, они не проблема с поддерживаемыми методамиArrayAccess, Функциональность связывания - это то, где я в растерянности, и я начинаю признавать, что ограничения ArrayAccess и PHP просто запрещают это.

Ответы на вопрос(2)

Ваш ответ на вопрос