Пусть у нас есть код, проверяющий число на простоту:
<?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;
}
?>
Сделайте функцию, которая параметром будет принимать массив с числами, и проверять, что все элементы в этом массиве являются четными числами.
Сделайте функцию, которая параметром будет принимать число и проверять, что все цифры это числа являются нечетными.
Сделайте функцию, которая параметром будет принимать массив и проверять, есть ли в этом массиве два одинаковых элемента подряд.