Как реализована функция 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
В этом способе я не уверен, хоть он и работает.

21 Авг 2019 в 06:58
153 +1
0
Ответы
1

В вашем примере вместо использования встроенной функции app() вы создали свой собственный класс App и метод getIstance(), который возвращает единственный экземпляр этого класса. С помощью этого экземпляра вы устанавливаете и получаете значение языка приложения.

Плюсы вашего подхода:

Возможность создания кастомного метода для установки и получения языка приложения.Возможность более гибкого управления методом setLocale() и getLocale().

Минусы вашего подхода:

Ваш код не соответствует стандартной практике и может быть запутывающим для других разработчиков.Лишний слой абстракции (класс App) может усложнить код и замедлить его выполнение.

Реализация функции app()->setLocale() в Laravel основана на использовании глобального доступа к сервис-контейнеру приложения. Это позволяет легко получать и устанавливать объекты и значения в любом месте кода без необходимости создания кастомных классов.

Если вам интересно, как именно работает функция app(), вы можете изучить реализацию сервис-контейнера в Laravel и механизм работы с глобальными функциями в PHP. Это поможет вам лучше понять, как функции типа app() работают в Laravel и как вы можете использовать их в своем коде. Однако, вам не стоит переопределять стандартные функции и классы Laravel без крайней необходимости, так как это может привести к неожиданным проблемам и сложностям в дальнейшем развитии проекта.

20 Апр в 13:10
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 84 727 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир