(код ниже совместим только с php 5)
Ваш код содержит еще одну ошибку:
$allset = $iwasthere->wasSet(); // this overwrites all previous checks
Должно быть
$allset = $iwasthere->wasSet() && $allset;
Также было бы лучше, если бы у вас был класс для формы вместо массива полей
Форма класса {
защищенные поля $ = массив ();
function addField ($ field) {
$ this-> fields = $ field;
вернуть поле $;
}
function allSet () {
$ allSet = true;
foreach ($ this-> fields как $ field) {
$ allSet = $ allSet && $ field-> wasSet ();
}
return $ allSet;
}
}
для добавления полей вы можете (первый вариант) расширить класс:
RegisterForm extends Form{
function __construct(){
$name = $this->addField(new FormField('name'));
$action = $this->addField(new FormField('action'));
$action->hidden = true;
}
}
тогда вы используете это так:
$form = new RegisterForm();
Или (второй вариант) вы можете добавить поля после создания формы
$form = new Form();
$name = $form->addField(new FormField('name'));
....
и тогда использование довольно упрощено:
....
if(!$form->allSet()){ // that looks like clean code
...error...
}
если у вас есть 2 формы:
$allSet = $form1->allSet() && $form2->allSet();
if( !$allSet ){
...error...
}
если вам нужно сделать один и тот же цикл дважды, ваш код уже грязный