Задать вопрос

Как в PHP вернуть NULL по ссылке?

Есть структура типа массива. Доступ к элементам массива происходит методом at(). Нужно, чтобы при отсуствии элемента под данным индексом возвращался null. Такое решение работает, но в логе куча предупреждений PHP Notice: Only variable references should be returned by reference на строке return $this->a[$i] ?? self::$_NULL; Как это можно исправить или правильно реализовать? Почему вообще возникает ошибка? Разве self::$_NULL не является переменной?
class MyStack 
{
  var $a = [];
  var $i = 0;
  static $_NULL = null;
 
  function __construct( $arr = [] ) 
  {
    $this->a = (array)$arr;
    $this->i = 0;
  }
  
  function &at( $i )
  {
    return $this->a[$i] ?? self::$_NULL;
  }
}

$myStack = new MyStack([
  (object)['value' => 1], 
  (object)['value' => 2],
]);

if( isset($myStack->at(1)->value) ) {
  $myStack->at(1)->value += 10;
}

echo $myStack->at(1)->value;
  • Вопрос задан
  • 44 просмотра
Подписаться 1 Простой 3 комментария
Помогут разобраться в теме Все курсы
  • Skillbox
    Веб-разработчик на PHP
    9 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Stepik
    Язык программирования PHP
    1 неделя
    Далее
Пригласить эксперта
Ответы на вопрос 1
nokimaro
@nokimaro
Меня невозможно остановить, если я смогу начать.
?? возвращает результат выражения (временное значение на которое нельзя дать ссылку), а не переменную, поэтому интерпретатор и ругается
просто проверку надо сделать явной и возвращать одно или другое

вот так будет работать без Notice
public function &at(int $i)
    {
        if (array_key_exists($i, $this->a)) {
            return $this->a[$i];
        }

        return self::$_NULL;
    }
Ответ написан
Ваш ответ на вопрос

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

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