php gettext и poedit - что было бы быстрее, используя конструктор или без

Я храню некоторые атрибуты и их параметры в классе Attributes.

public static $ethnicity        = array(0 => '-', 
                                        1 => 'Asian',
                                        2 => 'Black / African descent',
                                        3 => 'East Indian',
                                        4 => 'Latino / Hispanic',
                                        5 => 'Middle Eastern',
                                        6 => 'Native American',
                                        7 => 'Pacific Islander',
                                        8 => 'White / Caucasian',
                                        9 => 'Other');  

Почему я держу их в коде, а не в БД, это другая история. Теперь у меня проблема с poedit, потому что он не может читать динамические переводы. У меня сейчас два варианта:

а) Поместите все значения массива в один файл дампа. Этот файл будет использоваться только анализатором poedit:

_('Asian'), _('Black / African descent'), ...

Таким образом, я могу назвать переводы следующим образом:

echo _(Attributes::$ethnicity[3]));

б) я могу использовать конструктор и вызвать gettext оттуда.

class Attributes 
{ 

    public function __construct()
    {
        $this->ethnicity        = array(0 => _('-'), 
                                        1 => _('Asian'),
                                        2 => _('Black / African descent'),
                                        3 => _('East Indian'),
                                        4 => _('Latino / Hispanic'),
                                        5 => _('Middle Eastern'),
                                        6 => _('Native American'),
                                        7 => _('Pacific Islander'),
                                        8 => _('White / Caucasian'),
                                        9 => _('Other'));  
      //...      
    }                                    
}

Таким образом, я могу назвать переводы следующим образом:

$attr = new Attributes;
echo $attr->ethnicity[3]; 

Теперь к моим вопросам:

Скажем, будет около 10 таких атрибутов и в среднем 40 вариантов, так что это всего 400 пар массивов. Будет ли использование конструкции таким образом медленным приложением в любом случае? Поскольку это будет означать, что каждый раз, когда я вызываю конструктор, gettext будет вызываться для всех значений массива, даже если это значение атрибута не отображается в представлении. Если я не использую конструктор, то gettext будет вызываться только для отдельных значений атрибутов, которые будут фактически использоваться.

Я сделал тест на аб, ​​но был удивлен, потому что не было никакой разницы. Но я беспокоюсь о том, что я должен что-то упустить, так как мой смысл сказал бы, что вызов конструктора таким образом вызовет некоторое замедление.

1 ответ

Лично я бы придерживался решения B, поскольку оно чище, и через несколько месяцев вы все еще знаете, что $attr->ethnicity[3]; делает.

Если вы все еще не уверены, попробуйте выполнить стресс-тест - попробуйте вызвать конструктор много раз. Но мое скромное мнение таково, что не будет существенной разницы. Особенно, если вам не нужно называть это много раз в живом приложении. gettext разработан, чтобы быть быстрым.

Другие вопросы по тегам