function f_stripslashes'($mixed) { if (is_array($mixed)) return array_map('f_stripslashes', $mixed); else return stripslashes($mixed); } if (get_magic_quotes_gpc()) { $_GET = f_rec_stripslashes($_GET); }
#1
17 января 2017 в 22:51
Подскажите, пожалуйста, как работает функция f_stripslashes? Что у неё на входе и что на выходе — мне понятно, а логика внутри не доходит до меня.
php.net/manual/ru/function.array-map.php
array_map — Применяет callback-функцию ко всем элементам указанных массивов
array_map — Применяет callback-функцию ко всем элементам указанных массивов
#3
18 января 2017 в 01:44
Функция вызывает саму себя через array_map() для каждого элемента переданного ей массива (это называется "рекурсией") или выполняется один раз, если переданное значение — не массив.
Рекурсия на Википедии
Примеры использования рекурсии на Хабре
Рекурсия на Википедии
Примеры использования рекурсии на Хабре
Сегодня в 05:39
Спасибо.
Про рекурсию я знаю и про калл бак тоже читал. По отдельности каждую функцию понимаю, а всё вместе ни бум-бум.
Учитывая, что array_map возвращает массив, то при массиве на входе должна получиться вечная рекурсия, так мне кажется, но на самом деле всё работает исправно.
Или по другому выразить моё непонимание.
Чтобы сработала функция stripslashes, $mixed должен стать не массивом, а этого преобразования нет.
Да, вверху в скрипте описка. Должно быть так:
Про рекурсию я знаю и про калл бак тоже читал. По отдельности каждую функцию понимаю, а всё вместе ни бум-бум.
Учитывая, что array_map возвращает массив, то при массиве на входе должна получиться вечная рекурсия, так мне кажется, но на самом деле всё работает исправно.
Или по другому выразить моё непонимание.
Чтобы сработала функция stripslashes, $mixed должен стать не массивом, а этого преобразования нет.
Да, вверху в скрипте описка. Должно быть так:
function f_stripslashes'($mixed) { if (is_array($mixed)) return array_map('f_stripslashes', $mixed); else return stripslashes($mixed); } if (get_magic_quotes_gpc()) { $_GET = f_stripslashes($_GET); }
// В коде лишняя кавычка! function f_stripslashes($mixed) { // если $mixed является массивом то... // ...вызвать эту же функцию отдельно с каждым элементом массива // иначе (т.е. если это не массив) вернуть строку без экранирующих бекслешей } //На PHP 5.4.0 и выше работать не будет!!! //Если в настройках PHP magic_quotes_gpc включен... $_GET = f_stripslashes($_GET); // ...отправить весь массив $_GET на чистку от обратных слешей }
Разобрался. Sonat, вам отдельное спасибо за фразу "//… вызвать эту же функцию отдельно с каждым элементом массива". Я-то думал, что при рекурсии каждый раз передаётся весь массив.
Пошёл плюсик ставить.
Пошёл плюсик ставить.