применение include

voii

Новичок
Здравствуйте!
Подскажите пожалуйста, имею файл en.php в нем возвращается массив
return [
'lang' => 'english',
'login' => 'LogIn / Registration',
'inCatalog' => 'In catalog',
];

есть функция, которая при обращении к ней подключает это скрипт через include в переменную и возвращает элемент массива:
function getWordLang($keyStr)
{
$langFile = include PATH_TEMPLATE.'/lang/en.php';
return $langFile[$keyStr];
}

Скажите корректно ли так делать, что при каждом вызове функции файл en.php инклюдиться? Нагружает ли это сайт. В массиве не более 1000 элементов.
 

Фанат

oncle terrible
Команда форума
Нагружает не очень, но лучше так не делать.
Если массив требуется часто, то лучше его закэшировать, например через статическую переменную.
 

voii

Новичок
Нагружает не очень, но лучше так не делать.
Если массив требуется часто, то лучше его закэшировать, например через статическую переменную.
Сделал статический класс.
Подскажите по адекватности кода, если можно.

class UserLang
{
private static $lang;

public static function setLanguage()
{
if (!isset ($_SESSION['lang'])) {
$_SESSION['lang'] = 'ru';
}

if(isset($_POST['ru'])) {
$_SESSION['lang'] = 'ru';
header("Location: http://".$_SERVER["SERVER_NAME"].$_POST['uri']);
}

if (isset($_POST['en'])) {
$_SESSION['lang'] = 'en';
header("Location: http://".$_SERVER["SERVER_NAME"].$_POST['uri']);
}

self::$lang = $_SESSION['lang'];
}


public static function getLangWord($key)
{
return self::getLanguageFile()[$key];
}

private static function getLanguageFile()
{
return include PATH_TEMPLATE.'/lang/'.self::$lang.'.php';
}
}

в индексном файле вызываю, UserLang::setLanguage();

затем в тех местах где нужно
<?= UserLang::getLangWord('lang'); ?>
 

Фанат

oncle terrible
Команда форума
Чтобы оформить код, в форуме существует кнопка "код"

иначе его практически невозможно воспринимать
 

voii

Новичок
извиняюсь

Код:
class UserLang
{
    private static $lang;

    public static function setLanguage()
    {
        if (!isset ($_SESSION['lang'])) {
            $_SESSION['lang'] = 'ru';
        }

        if(isset($_POST['ru'])) {
            $_SESSION['lang'] = 'ru';
            header("Location: http://".$_SERVER["SERVER_NAME"].$_POST['uri']);
        }

        if (isset($_POST['en'])) {
            $_SESSION['lang'] = 'en';
            header("Location: http://".$_SERVER["SERVER_NAME"].$_POST['uri']);
        }

        self::$lang = $_SESSION['lang'];
    }


    public static function getLangWord($key)
    {
        return self::getLanguageFile()[$key];
    }

    private static function getLanguageFile()
    {
        return include PATH_TEMPLATE.'/lang/'.self::$lang.'.php';
    }
}
в индексном файле вызываю, UserLang::setLanguage();

затем в тех местах где нужно - UserLang::getLangWord('lang');
 

voii

Новичок
не то, так же вызывается каждый раз include. Нужно сделать еще одно поле и инклюдить массив из файла в него при установке языка, а уже затем обращаться к этому полю, тогда include будет вызваться только один раз.
Спасибо, кажется всё понял.
 

voii

Новичок
вот так будет лучше

Код:
<?php

class UserLang
{
    private static $lang;
    private static $arLangWord;

    public static function setLanguage()
    {
        if (!isset ($_SESSION['lang'])) {
            $_SESSION['lang'] = 'ru';
        }

        if(isset($_POST['ru'])) {
            $_SESSION['lang'] = 'ru';
            header("Location: http://".$_SERVER["SERVER_NAME"].$_POST['uri']);
        }

        if (isset($_POST['en'])) {
            $_SESSION['lang'] = 'en';
            header("Location: http://".$_SERVER["SERVER_NAME"].$_POST['uri']);
        }

        self::$lang = $_SESSION['lang'];
        self::$arLangWord = include PATH_TEMPLATE.'/lang/'.self::$lang.'.php';
    }

    public static function getLangWord($key)
    {
        return self::$arLangWord[$key];
    }
}
 

WMix

герр M:)ller
Партнер клуба
$_SESSION, $_SERVER конечно жуть, но раздели задачи хотяб, и избався от static
 

WMix

герр M:)ller
Партнер клуба
потому-что global, +UserLang из-за сессии можно использовать только в http контексте.
 

voii

Новичок
мне этот класс нужен для того чтобы установить язык пользователя с кнопки формы, подключить языковой файл для статического текста, и методами для статического и динамического контента бегать по всему сайту и менять вывод текста.
А так как сайт написан кем-то на какой-то самописной cms я и использовал статический класс, потому что создавать объект класса в каждом из многочисленных скриптов тоже не очень. А нормально сделать один объект в индексе например и использовать его потом по всему сайту не получается. Поэтому и пытаюсь сделать костыль для костыля. )
 

voii

Новичок
Большое спасибо за ответы. Немного живых форумов осталось, где подсказывают, а не рассказывают какой ты дебил и неучь и не нужно тебе это вместо реальной помощи )))
 

voii

Новичок
а в целом использование статического класса и сессий не сильно нагружает сайт?
 

voii

Новичок
ну и плюс если это просто не очень правильное или удобное "архитектурное" решение то это одно, а если это таит в себе уязвимости или влечет в последствии неадекватную работу в следствии перегруженности сайта и т.д. то это уже другое и требует исправления.
 

WMix

герр M:)ller
Партнер клуба
нет, оно просто делает сложным пойск ошибок в будущем, когда напихаешь в код побольше UserLang::setLanguage() и сайт начнет реврайтится в бесконечности, особенно для поколения после тебя.
 
Сверху