Рекурсивный вызов функций из списка
Имеется массив со списком существующих функций, например:
$array = ['func1', 'func2', 'func3', 'func4'];
Каждая функция возвращает булев либо true, либо false, вот примерная структура:
function func1(): bool {
return true;
}
function func2(): bool {
return false;
}
Задача состоит в том, чтобы пройтись по функциям из списка вызывая их, пока последующая будет отдавать true.
Важно: запрос к следующей может быть осуществлен, если текущая функция отдала true.
На функции, которая выдаст false необходимо остановить и получить название функции, на которой остановились.
Ручной вариант выглядит так:
if (func1() !== false)
{
if (func2() !== false) {
// etc
}
}
Можно ли как-то это автоматизировать, чтобы все происходило автоматически. Так как список функций всегда разный, и названия могут отличаться. Надеюсь, объяснения задачи понятны.
Ответы (4 шт):
Есть такая возможность:
<?php
$array = ['func1', 'func2', 'func3', 'func4'];
function GlazaRebenka($array)
{
foreach ($array as $key => $value) {
$name = $value;
if ($name() != true) {
return $name;
}
}
}
print_r(GlazaRebenka($array));
function func1(): bool {
return true;
}
function func2(): bool {
return true;
}
function func3(): bool {
return false;
}
function func4(): bool {
return false;
}
for ($i = 0; $i < count($array) - 1; ++$i) {
$func = $array[$i];
if (!$func()) {
echo $func;
break;
}
}
$arr = ['function1', 'function2', 'function3', 'function4'];
foreach ($arr as $function) {
if (!$function()) {
break;
}
echo 'OK';
}
Тут ни функция не нужна, ни тем более рекурсия. Достаточно одного цикла и одного условия:
$array = ['func1', 'func2', 'func3', 'func4'];
foreach ($array as $func) {
if ($func() !== true) {
die($func);
}
}
function func1(): bool {
return true;
}
function func2(): bool {
return true;
}
function func3(): bool {
return false;
}
function func4(): bool {
return true;
}