Можно ли как то функцию видеть переменную без global и передачи в параметр?
Допустим есть функция
function($test){
echo $user;
}
есть переменная $user,
можно ли как то вывести эту переменную без global с самой функции и без передачи в параметры функции?
Работаю с Laravel, Vue, Vuetify, AWS Amazon, Linux
Не используйте переменную для хранения данных пользователя, используйте ф-цию или метод какого-то класса, у них будет глобальная область видимости, я делаю что то типа такого:
function User(){
static $user;
if (!$user){
$user = 'тут получаем данные пользователя';
}
return $user;
}
В любом месте кода вызываете User()->id или User()['id'] в зависимости что возвращает ф-ция, массив или объект.
avtorlego: лучше так никогда не делать. Я могу написать про сайд-эффект функций, почему они зло, почему процедурное программирование сдохло и прочие штуки, но это долго, так что просто поверьте на слово.
За пример кода автора, выше, в приличном обществе выгоняют с работы. Как, собственно, и за глобалсы.
Люди давным-давно придумали такую штуку, как
1) классы
2) и делегирование.
Обе эти шняги помогут решить вашу проблему, если кратко:
class User
{
// ....
}
class Authentication
{
private $user;
public function current(): User
{
if ($this->user === null) {
$this->user = $this->loadUser();
}
return $this->user;
}
private function loadUser(): User
{
// тут получаем данные пользователя
}
}
$auth = new Authentication($database, $cookie);
// Для аутентификации может потребоваться БД и Кукисы
$auth->current(); // User
Отличие в том, что в любой момент мы можем создать хоть тысячу объектов аутентификации и уничтожить их. В идеале, конечно, использовать интерфейсы, а не классы, но до полиморфизма ещё рано =)
Кирилл Несмеянов: я вам дальше больше скажу, за каждый вызов $auth->current(); вы загружаете данные пользователя заново, в лучшем случае это простенький SQL запрос, за 20ти разовое использование $auth->current(); получим 19 лишних SQL запросов, если кого и выгоняют, то за такое.
Кирилл Несмеянов: я вам сажу еще больше, вы вопрос читали? Как автор узнает о $auth не передав её в ф-цию или не объявит её глобальной? Вы даже не правильно ответили на вопрос.