В чем разница между объявлением переменной в функции как global
или public/private
VS, передающей ее функции в качестве аргумента?В PHP, в чем разница между объявлением переменной как глобальной внутренней функции или передачей переменной в качестве аргумента функции?
Другое родственное спутанность
Я недавно вызвал себе большую головную боль пытается передать аа переменную массива в функцию в качестве global
и редактирования внутри и в надежде вернуть его изменился, и он взял меня часов выяснить, что мне нужно, чтобы передать его в функцию в качестве аргумента ссылки, как functionCall(&$arrayVar);
вопрос второстепенный: Но я до сих пор удивляюсь, почему он не работает, чтобы передать переменную в качестве global
затем отредактировать его и выплюнуть его обратно return
или просто сделать что-то вроде конкатенации в массив переменных?
Еще один пример, с которым я столкнулся, - это сделать функцию PHPMailer, где я передаю ей несколько аргументов, таких как адрес электронной почты и тело сообщения, но мне также необходимо передать строки аутентификации, такие как ключ API и т. Д. . при этом каждый раз, когда я называю это:
- Я не хочу, чтобы передать ему свои учетные данные каждый раз, когда я вызываю функцию PHMailer (например, по электронной почте сообщения об ошибке в одном из нескольких этапов)
- Но я хочу передавать ему уникальные аргументы каждый раз, когда я это называю
Поэтому я полагал, что лучший способ, как это:
function phpMailer($mail_to = "[email protected]", $mail_from = "[email protected]") {
global $authCredentials;
}
// And of course, when I call phpMailer, I call it like
phpMailer("[email protected]", "[email protected]");
Третичный вопрос: ли это уместно использование global
или есть какой-то другой способ, которым я должен делать это?
Разница в том, что последнее является явным. Вы знаете, откуда приходит переменная, и кто имеет право изменять ее. – zerkms
a. они в основном идентичны –
'global' является неправильным произведением. PHP не имеет глобальных переменных (кроме $ _GET/POST/...). Они всегда связаны с областью. Если «передать его в» не сработало, то обычно из-за того, что вы начали в локальной области и не переписывали имя переменной соответственно. – mario