среда, 18 марта 2015 г.

Strict Standards: Only variables should be passed by reference

Данная ошибка в php может возникать в ряде случаев. Мы рассмотрим один из них.
При попытке в php получить последний элемент массива таким образом:
$ip = '192.168.0.2';
$lastNum = end(explode('.', $ip));
var_dump($lastNum); // string(1) "2" 

возникнет ошибка: Strict Standards: Only variables should be passed by reference.
Для устранения этой ошибки нужно просто обернуть вызов explode в скобки:
$ip = '192.168.0.2';
$lastNum = end( (explode('.', $ip)) );
var_dump($lastNum);

Это связано с тем, что функция end() принимает массив по ссылке и сдвигает его внутренний указатель на последний элемент. А по ссылке могут передаваться только объявленные переменные.

Обратите внимание, что так работать не будет:
$lastNum = end( array(1,2,3) );
var_dump($lastNum);

Придется поместить массив в переменную, а только после этого передать в end():
$nums = array(1,2,3);
$lastNum = end( $nums );
var_dump($lastNum); // int(3)



Комментариев нет:

Отправить комментарий