Главные новости

Strict Standards: Only variables should be passed by reference как исправить

Strict Standards: Only variables should be passed by reference как исправить
Подобная ошибка начала появляться при переходе на версию PHP 5.3 - 5.5, в которой запрещён вызов функции с параметром — константой, если функция ожидает на этом месте ссылки на переменную.
Приведу простой пример. Скажем, у нас есть функция, которая ожидает ссылку на переменную $key:
function myfunc($a, &$key) {
// Что-то делаем
}


Если мы будем вызывать эту функцию, подставляя на место второго параметра фиксированное значение (константу), то получим ошибку Strict Standards: Only variables should be passed by in … :
 
myfunc(1, 5); // Выдаст ошибку


Для того, чтобы устранить данную ошибку, не меняя логику программы, необходимо заменить параметр 5 на переменную, равную этому значению:
 
$mm = 5;
myfunc(1, $mm); // Нет ошибки


В этом случае всё верно — функция получит ссылку на переменную и никакого нарушения стандартов не произойдёт.
Другая распространённая причина возникновения подобной ошибки — это передача на вход функций, требующих указателя на переменную, результата выполнения другой функции.
Вот пример:
 
$r = end(explode('^', $massiv)); // Выдаст ошибку

В данном случае мы видим как результат работы функции explode() передаётся непосредственно как параметр в функцию end(). Но функция end() работает с указателем на массив, а не со значением массива. Поэтому тут также будет выведена ошибка.
Решение такое же как и в прошлом примере:
$temp1 = explode('^', $massiv);
$r = end($temp1);


То есть сперва мы переносим значение в настоящую переменную, и только потом передаём в end() указатель на эту переменную.
Собственно все ошибки подобного рода решаются именно таким образом. Если в вашей программе где-то стала вылетать вышеуказанная ошибка, то просто создавайте временную переменную там, где ошибочно передаётся константа.
Кстати, если вам интересно зачем нужны ссылки на переменные и чем это отличается от простой передачи переменной, то читайте следующую статью.