Переменные против констант против ассоциативных массивов в PHP - PullRequest
3 голосов
/ 02 мая 2010

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

Что лучше для определения постоянных значений в PHP, с точки зрения производительности - констант, определенных с использованием define("FOO", "..."), или простых переменных, таких как $foo = "...", или ассоциативных массивов, таких как $symbols["FOO"]?

Ответы [ 4 ]

4 голосов
/ 02 мая 2010

Там не будет никакой заметной разницы в производительности, так что не беспокойтесь об этом. Делайте то, что будет легче поддерживать.

Лично я бы пошел с ассоциативным массивом, если он не слишком сложен. Если все немного сложнее, используйте gettext.

1 голос
/ 02 мая 2010

В скомпилированных языках константы заменяются компилятором, их постоянное значение влияет как на производительность, так и на требования к памяти.

В PHP define известен своей медлительностью.Настолько, что кто-то даже написал расширение PHP для решения проблемы: http://pecl.php.net/package/hidef


Теперь, когда я думаю об этом, это расширение может быть хорошим вариантом для поддержки интернационализации.Он позволяет вам определять константы в отдельном INI-файле, выглядя примерно так:

int N     = -191
str ABC   = "xyz"
float PIE = 3.1419
bool ART  = true

, который легко читать / понимать для непрограммистов (например, для переводчиков)

1 голос
/ 02 мая 2010

Думайте о gettext

Этот вопрос не связан с производительностью.
Никакая синтаксическая проблема (то есть константы против переменных) не может повлиять на производительность

0 голосов
/ 02 мая 2010

Возможно, вы захотите попробовать использовать Zend_Translate и Zend_Locale, а также любые другие необходимые вам компоненты (Zend_Date, Zend_Currency и т. Д.).Это увеличит размер вашего приложения с точки зрения файлового пространства, но вы можете легко кэшировать все свои переводы, и это позволит вам выбирать из множества разных вариантов для ваших переводов (getext, tmx, csv, xliff и т. Д.),

...