- Теория
- Теория
Функция intval
Мы посчитали смещение для любой страницы каталога и попробовали менять параметр page
. Если в адресной строке указать число, то всё работает, но если значение не указать или указать неправильно, то на странице выводятся шесть последних товаров. Почему так происходит?
Причина в этой команде:
$offset = ($page - 1) * $limit;
Вычесть число можно только из другого числа. Если в переменной $page
оказывается нечисловое значение, PHP пытается преобразовать его в число. А если не выходит, подставляет на его место ноль. Подробнее о преобразовании вы можете почитать в документации.
Если в каталоге в адресной строке указать неправильное значение, то вместо номера страницы в переменную $page
подставится ноль. В результате смещение окажется равным -6
. Это значение мы передаём вторым аргументом в функцию array_slice
:
$products_on_page = array_slice($products, $offset, $limit, true);
Если второй аргумент функции — отрицательное число, отсчёт элементов начинается с конца массива: -1
— последний элемент, -2
— второй элемент с конца и так далее. Мы передаём функции -6
, то есть просим начать с шестого элемента с конца. В итоге на страницу выводятся последние шесть товаров.
Это может запутать покупателей. Если адрес указан неверно, должна открываться первая страница каталога. Для этого сначала проверим, можно ли получить из параметра page
число. Если можно, используем его. А если нельзя, используем число 1
.
Получить число из параметра page
можно с помощью встроенной функции intval
. Функция принимает любое значение и всегда возвращает число. Если передать ей обычное число, она вернёт его же. Но если передать строку, функция попробует извлечь из неё число. Получить из строки число можно, если оно идёт в самом начале. Если числа в строке нет или если оно идёт не первым, функция вернёт 0
:
keks_log(intval('38 попугаев')); // Выведет: "38"
keks_log(intval('Пятница 13')); // Выведет: "0"
Передадим функции intval
значение из параметра page
и посмотрим, что она вернёт. Поэкспериментируем с разными значениями.
- index.html
Вы перешли на другую страницу
Кликните внутри мини-браузера, чтобы поставить фокус в это окно.