Сегодня я нашел странное поведение при использовании метода ArrayCollection :: forAll против анонимной функции с рекурсией.ArrayCollection :: forAll с рекурсией
Предпосылки:
У меня есть коллекция Post
лиц. Каждый Post
содержит набор объектов SocialPost
.
Цель: Статус
Набор для всех почтовых и SocialPost субъектам "в ожидании".
Мое решение:
Я думал, что я мог бы использовать довольно простое закрытие, как это:
$setPending = function($_, StatusAwareInterface $post) use (&$setPending) {
echo "func entry point reached\r\n";
if ($post instanceof Post) {
echo "This is post. SP Count: " . count($post->getSocialPosts()) . "\r\n";
$post->getSocialPosts()->forAll($setPending);
$status = Post::STATUS_PENDING;
} else {
echo "This is SP\r\n";
$status = SocialPost::STATUS_PENDING;
}
$post->setStatus($status);
};
// $post contains 2 Post entities
// Each Post entity contains 50+ SocialPost entities
$posts->forAll($setPending);
Результат:
Но выход очень странно. Похоже, forAll использует только первый элемент, а затем ломается:
func entry point reached
This is post. SP Count: 52
func entry point reached
This is SP
Неужели кто-нибудь видит проблему здесь?
Да, вы правы. Я использовал этот метод, полагая, что он работает точно так же, как array_walk. Спасибо. – Hast