php gettext и poedit - что будет быстрее с конструктором или без

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

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');  

Почему я храню их в коде, а не в db — это отдельная история. Теперь у меня проблема с 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 будет вызываться только для значений отдельных атрибутов, которые будут фактически использоваться.

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


person user1324762    schedule 07.07.2012    source источник


Ответы (1)


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

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

person mato    schedule 07.10.2012