применение include

  • Автор темы Автор темы voii
  • Дата начала Дата начала

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 элементов.
 
Нагружает не очень, но лучше так не делать.
Если массив требуется часто, то лучше его закэшировать, например через статическую переменную.
 
Нагружает не очень, но лучше так не делать.
Если массив требуется часто, то лучше его закэшировать, например через статическую переменную.

Сделал статический класс.
Подскажите по адекватности кода, если можно.

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'); ?>
 
Чтобы оформить код, в форуме существует кнопка "код"
Snymok_ekrana_2016_03_15_v_08_00_43.png

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

Код:
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');
 
не то, так же вызывается каждый раз include. Нужно сделать еще одно поле и инклюдить массив из файла в него при установке языка, а уже затем обращаться к этому полю, тогда include будет вызваться только один раз.
Спасибо, кажется всё понял.
 
вот так будет лучше

Код:
<?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];
    }
}
 
$_SESSION, $_SERVER конечно жуть, но раздели задачи хотяб, и избався от static
 
потому-что global, +UserLang из-за сессии можно использовать только в http контексте.
 
мне этот класс нужен для того чтобы установить язык пользователя с кнопки формы, подключить языковой файл для статического текста, и методами для статического и динамического контента бегать по всему сайту и менять вывод текста.
А так как сайт написан кем-то на какой-то самописной cms я и использовал статический класс, потому что создавать объект класса в каждом из многочисленных скриптов тоже не очень. А нормально сделать один объект в индексе например и использовать его потом по всему сайту не получается. Поэтому и пытаюсь сделать костыль для костыля. )
 
Большое спасибо за ответы. Немного живых форумов осталось, где подсказывают, а не рассказывают какой ты дебил и неучь и не нужно тебе это вместо реальной помощи )))
 
а в целом использование статического класса и сессий не сильно нагружает сайт?
 
ну и плюс если это просто не очень правильное или удобное "архитектурное" решение то это одно, а если это таит в себе уязвимости или влечет в последствии неадекватную работу в следствии перегруженности сайта и т.д. то это уже другое и требует исправления.
 
нет, оно просто делает сложным пойск ошибок в будущем, когда напихаешь в код побольше UserLang::setLanguage() и сайт начнет реврайтится в бесконечности, особенно для поколения после тебя.
 
Сверху