2010-12-12 5 views
3
  1. Что такое правильный способ использования array_splice в PHP? В заголовке функции четко сказано:PHP массив массива по ссылке

    array_splice (array &$input , int $offset... поэтому он должен принимать ссылку в качестве первого аргумента.

    Однако линия

    array_push(&$this->contextsIds, $contextId);

    Триггеры ошибку Устарел: Call времени пройти по ссылке устарела в ... Линия 132

  2. Как вернуть ссылка на массив? У меня есть:

    public function &getContextsIds() { 
        return is_array($this->contextsIds) ? $this->contextsIds : array();  
    } 
    

    , но он говорит Примечание: только ссылки на переменные должны быть возвращены путем ссылки

ответ

7
  1. Функция уже объявлена ​​взять ссылку (array &$input); при вызове функции вам не понадобится &. Просто назвать это так:

    array_push($this->contextsIds, $contextId); 
    
  2. Как говорится в сообщении, вы должны возвращать только фактические переменные по ссылке, а не простые значения. В вашем примере есть два таких экземпляра: оператор ? : оценивает значение, а также array() сам по себе является значением, не связанным с какой-либо переменной. Вы должны, вероятно, просто вернуть член класса, независимо от того, является ли он пустым или нет:

    return $this->contextIds; 
    
+0

Спасибо! Не могли бы вы помочь мне на втором, который я добавил? – tillda

+0

@tillda: Я обновил ответ. – casablanca

+0

«независимо от того, пуст он или нет». Он тестирует 'is_array()' – BoltClock

1

Зачем возвращать ссылку на массив, особенно в коде, при условии:

public function &getContextsIds() { 
    return is_array($this->contextsIds) ? $this->contextsIds : array();  
} 

Когда эта функция будет работать, она может вернуть ссылку на пустой массив, я мог бы сделать с ней то, что я хочу, и изменить его столько, сколько захочу, но это не повлияет, потому что это было просто пустой массив без каких-либо дополнительных ссылок ..

Смежные вопросы