Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

Ответ 3

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

Ответ 5

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

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

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