Передача по ссылке во время вызова устарела, ошибка array_push - PullRequest
1 голос
/ 03 июля 2011

Я использую класс MysqliDb, и он выдает эту ошибку:

"Устарел: передача по вызову во время вызова устарела в C: ... \ MySqlDb.php onстрока 101 ", 340, 348 и 375

где функция array_push:

array_push($params, &$bindParams[$prop]);

array_push($this->_bindParams, &$tableData[$prop]);

Я удалил" & ", и это сработало, но только для этих / \ two,но не для этих / двух (с большим количеством ошибок)

if($hasConditional) {
            if ($this->_where) {
                $this->_bindParams[0] .= $this->_whereTypeList;
                foreach ($this->_where as $prop => $val) {
                    array_push($this->_bindParams, &$this->_where[$prop]);
                }
            }   
        }

и

while ($field = $meta->fetch_field()) {
            array_push($parameters, &$row[$field->name]);
        }

Класс MysqliDb можно найти здесь: https://github.com/ajillion/PHP-MySQLi-Database-Class

1 Ответ

3 голосов
/ 03 июля 2011

array_push эквивалентно добавлению элемента в массив. Вы можете переписать строку

     array_push($this->_bindParams, &$this->_where[$prop]);

до

     $this->_bindParams[] =  & $this->_where[$prop];

в вашем случае.


Ошибка E_DEPRECATED является предупреждением, кстати. Передача по ссылке еще возможна. Чтобы избежать предупреждения, вы можете использовать его с помощью этого неуклюжего обходного пути:

call_user_func_array("array_push", array(&$this->_bindParams, &$this->_where[$prop]));

(тогда на самом деле нужно передать по ссылке для обоих параметров.)

...