Почему нельзя присваивать значение по ссылке, которую возвращает функция?

Пытаюсь сделать на PHP что-то вроде std::vector из С++

class Vector
{
  private $a = [];

  function __construct( $arr = [] ) {
    $this->a = (array)$arr;
  }
  
  function &at( $i ) {
    return $this->a[$i];
  } 
}


К удивлению обнаружил, что так делать нельзя:
$vec = new Vector( ['a',  'b'] );
$vec->at(1) = 'z'; // Fatal error: Can't use method return value in write context
А так почему-то можно:
$vec = new Vector( ['a',  'b'] );
$ref = &$vec->at(1);
$ref = 'z'; // ok!


Можно как-то реализовать присвоение без промежуточных переменных?
  • Вопрос задан
  • 180 просмотров
Пригласить эксперта
Ответы на вопрос 1
toxa82
@toxa82
Нельзя. Это ж переменные передаются по ссылке, поэтому без переменной никак.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы