• Теория
  • Теория

Функция 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
HTML
HTML

Вы перешли на другую страницу

Кликните внутри мини-браузера, чтобы поставить фокус в это окно.

100%
Бабушка Кекс

Притормози, дружище

Проходить вызовы части «Числа и строки в PHP» тренажёра «Знакомство с PHP» можно после регистрации и оформления подписки.