В PHP, какова разница между объявлением переменной как глобальной внутренней функции или передачей переменной в качестве аргумента функции?

В чем разница между объявлением переменной внутри функции global или public/private VS, передающей ее функции в качестве аргумента?

Другая связанная путаница

Недавно я вызвал у меня большую головную боль, пытающуюся передать переменную aa array в функцию global и отредактировать ее внутри и надеяться вернуть ее, и мне потребовалось несколько часов, чтобы понять, что мне нужно передать ее в функцию как аргумент по ссылке, например functionCall(&$arrayVar);

Вторичный вопрос: Но мне все еще интересно, почему он не работает, чтобы передать переменную в global а затем отредактировать ее и выплевывать обратно с return или просто сделать что-то вроде конкатенации в массив переменных?

Еще один пример, с которым я столкнулся, заключается в создании функции для PHPMailer, где я передаю несколько аргументов, таких как адрес электронной почты и тело сообщения, но мне также необходимо передать строки аутентификации, такие как ключ API и т. Д. Здесь каждый время я называю это:

  1. Я не хочу передавать ему учетные данные для проверки подлинности каждый раз, когда я вызываю функцию PHMailer (например, для сообщения об ошибке электронной почты на одном из нескольких этапов)
  2. Но я хочу передавать ему уникальные аргументы каждый раз, когда я его называю

Поэтому я решил, что лучший способ:

 function phpMailer( $mail_to = "to@email.com", $mail_from = "a@b.com" ) { global $authCredentials; } // And of course, when I call phpMailer, I call it like phpMailer("that.guy@there.com", "me@here.com"); 

Третичный вопрос: Является ли это подходящим использованием global или есть какой-то другой способ, которым я должен это делать?