Why can’t I call a (member) function from within a foreach?

You use $mediatags variable in global scope as array in your loop, and then try to use the same variable as object in your function.

You override your global $mediatags variable in your loop. Try to use following code:

foreach($new_name_for_mediatags_array as $mediatag){
 $args="media_tags=animals&numberposts=10&return_type=li&size=thumbnail";
 $media_items = get_attachments_by_media_tags($args);
 echo $media_items;
};