Onatskyi
@Onatskyi

Как реализована функция app()->setLocale()?

Здравствуйте.
В Laravel чтобы изменить язык приложения нужно выполнить
App::setLocale();
// или
app()->setLocale();

Вот мне стало интересно как реализован второй способ и каковы его плюсы и минусы.
К функции (или как оно называется) доступ есть из любого места, а вот класс нужно подключать каждый раз через use. Пытался найти инфу в интернете, но безуспешно. Буду благодарен за любую помощь и информацию по этому вопросу. PHP я только изучаю, но можете пинать. :)

Методом тыка вот так я это реализовал:
class App
{
  protected static $instance = null;
  protected $locale = 'ru';

  public static function getIstance() {
    if ( self::$instance === null ) self::$instance = new self();
    return self::$instance;
  }

  public function __construct() {}
  public function __clone() {}

  public function setLocale( $locale )  {
    $this->locale = $locale;
  }
  public function getLocale( $locale )  {
    return $this->locale;
  }
}


function app() { return App::getIstance(); }

app()->getLocale(); // ru
app()->setLocale('en');
app()->getLocale(); // en


В этом способе я не уверен, хоть он и работает.
  • Вопрос задан
  • 523 просмотра
Пригласить эксперта
Ответы на вопрос 1
@NubasLol
Onatskyi, первый способ использует фасады, которые работают на магии php

https://www.php.net/manual/ru/language.oop5.magic.php

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

App() дает доступ к контейнеру ларавел

Читай про внедрение зависимостей и сервис контейнер. Это паттерны которые в ларе реализованы

И ты попытался сделать синголтон, но в ларе уже все есть для этого, в сервис контейнер можешь сам нужные инстансы засунуть.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы