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

Подобная ошибка начала появляться при переходе на версию PHP 5.3, в которой запрещён вызов функции с параметром — константой, если функция ожидает на этом месте ссылки на переменную.

Приведу простой пример. Скажем, у нас есть функция, которая ожидает ссылку на переменную $b:

function myfunc($a, &$b) {
     // Что-то делаем
}

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

myfunc(1, 5);  // Выдаст ошибку

Для того, чтобы устранить данную ошибку, не меняя логику программы, необходимо заменить параметр 5 на переменную, равную этому значению:

$mm = 5;
myfunc(1, $mm);  // Нет ошибки

В этом случае всё верно — функция получит ссылку на переменную и никакого нарушения стандартов не произойдёт.

Другая распространённая причина возникновения подобной ошибки — это передача на вход функций, требующих указателя на переменную, результата выполнения другой функции. Вот пример:

$r = end(explode('/', $n)); // Выдаст ошибку

В данном случае мы видим как результат работы функции explode() передаётся непосредственно как параметр в функцию end(). Но функция end() работает с указателем на массив, а не со значением массива. Поэтому тут также будет выведена ошибка.

Решение такое же как и в прошлом примере:

$temp1 = explode('/', $n);
$r = end($temp1);

То есть сперва мы переносим значение в настоящую переменную, и только потом передаём в end() указатель на эту переменную.

Собственно все ошибки подобного рода решаются именно таким образом. Если в вашей программе где-то стала вылетать вышеуказанная ошибка, то просто создавайте временную переменную там, где ошибочно передаётся константа.

Кстати, если вам интересно зачем нужны ссылки на переменные и чем это отличается от простой передачи переменной, то читайте следующую статью.

Подписаться
Уведомить о
guest
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии