Что быстрее? Константы, переменные или переменные массивы

В моем текущем веб-приложении используется около 30 или около того Contants (DEFINE ()). Я читаю, что переменные быстрее. При условии, что существует соглашение об именах, чтобы избежать перезаписи переменных, единственное, что я вижу, это то, что эти переменные должны быть определены как глобальные переменные, как в каждой функции.

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

Константы, определенные с помощью define() , довольно медленны в PHP. На самом деле люди написали расширения (например, hidef ), чтобы улучшить производительность.

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

Начиная с PHP 5.3 вы также можете использовать константы времени компиляции, используя const NAME = VALUE; , Это намного быстрее.

Разница была бы очень маленькой (микрооптимизация). Вам лучше инкапсулировать некоторые из ваших констант в классах, чтобы вы могли получить к ним доступ с помощью Classname::CONSTANT чтобы не загрязнять глобальное пространство имен вашего приложения.

Быстрый тест показал, что определяющие константы ( define('FOO', 'bar'); ) примерно в 16-18 раз медленнее, чем определение переменной ( $foo = 'bar'; ), но с использованием определенного (постоянного) значения примерно в 4-6 раз быстрее.

Результаты этого теста все еще сохраняются; переменные быстрее, чем define() и const : http://planetozh.com/blog/2006/06/php-variables-vs-constants

http://www.joomlaperformance.com/articles/performance/52_php_programming_tips_43_13_2.html

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

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

Существует ни один ответ, который работает для всех, но популярным решением является либо использование класса реестра, либо его создание самостоятельно. Вы можете сделать это довольно легко, объявив массив php. Затем вы инициализируете объект реестра, а ваши функции и классы получают доступ к нему через вызов статического метода. Вместо того, чтобы предоставлять вам фрагменты, я просто приведу вам примеры zend_config и zend_registry . В то время как ZF предоставляет их, вы не должны бояться катить свои собственные версии, так как не особенно сложно воссоздать в более простой форме, если вы хотите избежать использования ZF в своем проекте.