В коде парень использовал foreach для доступа к элементу массива, имя которого у него уже было!Насколько я понимаю - это пустая трата ресурсов и плохая (даже странная) практика.
Первый параметр - это всегда массив с одним ключом и его значением, второй параметр - это результат вызова этой функции.в блоке, называемом ключом ... Итак, все, что вам нужно, это отправить ключ и не нужно итерировать
Код использует foreach
для итерации по $field
, чтомассив из одной пары ключ-значение.Все начинается, когда подпрограмма проверки вызывает identicalFieldValues
, передавая ей два значения - $field
, которые будут выглядеть как массив:
array (
[email] => 'user entered value 1'
)
Второй параметр $compare_field
будет установлен вstring confirm_email
.
В данном конкретном случае не похоже, что имеет смысл использовать foreach
, поскольку в вашем массиве есть только одна пара ключ-значение.Но вы должны написать код таким образом, потому что CakePHP будет передавать массив методу.
Я полагаю, что причина, почему CakePHP делает это, заключается в том, что массив - единственный способ передать и имя поля, и его значение.Хотя в этом случае имя поля (электронная почта) не имеет значения, в других случаях вам может понадобиться.
То, что вы видите здесь, является одним из предостережений при использовании фреймворков.В большинстве случаев они упрощают ваш код.Но иногда вам приходится писать код, который вы не могли бы написать нормально, просто чтобы фреймворк был доволен.
Еще одна вещь о коде: я не понимаю использование продолжениятам.это массив из одного поля, не так ли?сравнение должно произойти один раз, и цикл закончится.Пожалуйста, просветите меня.
Действительно.А поскольку в цикле foreach, следующего за continue
, нет операторов, весь блок else
также может быть опущен.
Упрощенная версия этого будет:
function identicalFieldValues($field=array(), $compare_field=null)
{
foreach ($field as $field) {
$compare = $this->data[$this->name][$compare_field];
if ($field !== $compare) {
return FALSE;
}
}
return TRUE;
}
И я согласен с вами, цикл проходит только одну итерацию при проверке поля email
. независимо от поля.Вам все еще нужен foreach
, потому что вы получаете массив, хотя.