#php #debugging #exception #exception-handling #foreach
#php #отладка #исключение #обработка исключений #foreach
Вопрос:
У меня много проблем с циклом foreach в PHP.
Это не обычная проблема «break exit return whatever;», и я объясню вам причину:
class Example {
private function generic(/* args */) {
global $db;
$result = false;
/* a series of if and functions, mysql transactions and
"throw new Exception" on rollback */
$notif = new Notification();
$notif->send(/* params */);
/* if commit succeded > $result = true; */
return $result;
}
public function start() {
$list = array("abc" => array("foo" => "bar", "foo2" => "bar"), "def" => array("foo" => "bar", "foo2" => "bar"));
foreach($list as $x => $y) {
$this->generic($x, $y, ....);
}
}
}
Похоже, проблема связана с $notif
объявлением и или $notif->send()
функцией.
Я попытался попробовать поймать всю generic()
функцию, а также send()
функцию, но исключение не выдается.
send()
Функция представляет собой не что иное, как серию запросов, и в конечном итоге (по запросу пользователя) отправляет уведомление по электронной почте через swiftmailer.
Еще одна деталь, которую я могу вам сообщить, заключается в том, что уведомление успешно отправляется, и, похоже, на первой итерации все работает нормально, но затем foreach останавливается.
Как я упоминал ранее: нет «exit ();» или «break;» или «return $ x;» в какой-то странной точке функции и так далее…
Есть ли у вас какие-либо идеи о том, в чем может быть проблема, или как я могу найти проблему?
Комментарии:
1. В
foreach($list as $x => $y)
вашей переменной$y
есть anarray
, это желаемый результат? Есть ли у вас сообщения об ошибках?2. Ну, может быть, foreach не останавливается, а просто не проходит через все значения. Как указал Бретт, вам понадобится другой foreach для итерации
$y
3. @BrettSantore да, это массив и… это ожидаемое значение
4. @1nflktd нет, я тестировал это
echo $x.print_r($y, true);
внутри foreach, и если я прокомментирую часть $notif, она просто просматривает все значения, в противном случае она не выполняется после вызова send()5. В каких параметрах
$notif->send(/* params */);
, похоже, вы отредактировали здесь слишком много.