Рекурсивный вызов функций из списка

Имеется массив со списком существующих функций, например:

$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 шт):

Автор решения: Denis640Kb

Есть такая возможность:

<?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;
    }
}
→ Ссылка
Автор решения: Slava
$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;
}
→ Ссылка