Флаги в функциях PHP

Пусть у нас есть код, проверяющий число на простоту:

<?php $num = 31; $flag = true; for ($i = 2; $i < $num; $i++) { if ($num % $i === 0) { $flag = false; break; } } var_dump($flag); ?>

Давайте оформим этот код в виде функции:

<?php function isPrime($num) { $flag = true; for ($i = 2; $i < $num; $i++) { if ($num % $i === 0) { $flag = false; break; } } return $flag; } ?>

Проверим работу нашей функции:

<?php var_dump( isPrime(10) ); var_dump( isPrime(31) ); ?>

Упростим код

Давайте теперь посмотрим, как можно упростить работу с флагами, если мы используем их в функции. На самом деле в случае с функцией переменная $flag и команда break нам не понадобятся - вместо них все сделает команда return.

Делается это следующим образом: внутри функции запускаем наш цикл с ифом и, если мы попали в иф - возвращаем false, тем самым выходя из цикла и из функции. А если цикл прокрутился, но выхода из функции не случилось - после цикла возвращаем true:

<?php function isPrime($num) { for ($i = 2; $i < $num; $i++) { if ($num % $i === 0) { return false; } } return true; } ?>

Еще раз как это работает: если в массиве найдется нужный элемент - мы выйдем из функции (и из цикла тоже) с помощью return. Но если в массиве не найдется нужный элемент - выхода из функции не произойдет и выполнение дойдет до команды return true. И получится, что функция вернет true в знак того, что число простое.

Проверка по массиву

Давайте теперь сделаем функцию, которая параметром будет принимать массив, и проверять, что все элементы в этом массиве положительные.

Пусть функция возвращает true, если это так, и false, если хотя бы один из элементов массива отрицательный. Вот примеры того, как должна работать наша функция:

<?php var_dump( isPositive([1, -2, 3, 4, -5]) ); // выведет false var_dump( isPositive([1, 2, 3, 4, 5]) ); // выведет true ?>

Реализуем описанную функцию с помощью неявного использования флагов:

<?php function isPositive($arr) { foreach ($arr as $elem) { if ($elem < 0) { return false; } } return true; } ?>

Сделайте функцию, которая параметром будет принимать массив с числами, и проверять, что все элементы в этом массиве являются четными числами.

Сделайте функцию, которая параметром будет принимать число и проверять, что все цифры это числа являются нечетными.

Сделайте функцию, которая параметром будет принимать массив и проверять, есть ли в этом массиве два одинаковых элемента подряд.