Как реализована функция 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
185 +1
0
Ответы
1

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

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

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

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

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

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

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

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