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

Пытаюсь сделать на 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!


Можно как-то реализовать присвоение без промежуточных переменных?
  • Вопрос задан
  • 175 просмотров
Пригласить эксперта
Ответы на вопрос 2
toxa82
@toxa82
Нельзя. Это ж переменные передаются по ссылке, поэтому без переменной никак.
Ответ написан
Комментировать
gzhegow
@gzhegow
aka "ОбнимиБизнесмена"
Мне что-то подсказывает, хотя я плоховато знаю теорию языка Си, что вы приравняли ссылку к указателю. В пхп к сожалению указателей нет. И при помощи $ref =& $this->func(); вы создаете переменную указывающую на эту ссылку, и потом можете её менять. Нельзя в пыхе "вернуть указатель".
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы