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

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

    Однако строка

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

    Вызывает ошибку устарел: передача по времени вызова устарела в ... строке 132

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

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

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

Ответы [ 2 ]

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

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

    return $this->contextIds;
    
1 голос
/ 12 декабря 2010

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...