Мое текущее веб-приложение использует около 30 или около того Contants (DEFINE ()). Я читаю то, что переменные быстрее. При условии, что существует соглашение об именах во избежание перезаписи переменных, единственный недостаток, который я вижу, заключается в том, что эти переменные должны быть определены как глобальные переменные каким-то образом в каждой функции.
Что быстрее? Я часто использую эти константы в своем приложении и, вероятно, буду постоянно добавлять их в список, и они используются в функциях и классах и вне их.
Быстрый тест показал, что определение констант (define('FOO', 'bar');
) примерно в 16-18 раз медленнее, чем определение переменной ($foo = 'bar';
), но использование определенного (постоянного) значения в 4–6 раз быстрее.
Я проводил сравнительный анализ constants
и variables
и заметил значительное улучшение производительности при использовании variables
по сравнению с constants
. Я знаю, что это довольно очевидно, но определенно стоит принять во внимание, что использование локальных переменных над константами всегда, когда это возможно.
Если constants
используется внутри loops
числа раз, определенно стоит объявить константу как переменную класса / local и использовать ее вместо этого.
Тестовый пример для сравнительного анализа включает создание двух функций. У каждого есть цикл, который выполняется 10000000
раз. Один обращается к константе, объявленной в константном файле, а другой - к локальной переменной.
TestConstants.php
class TestConstants
{
const TEST_CONSTANT = 'This is a constant value';
}
Test.php
use TestConstants;
class Test {
protected $TEST_CONSTANT;
protected $limit = 10000000;
function __construct() {
$this->TEST_CONSTANT = 'This is a constant value';
}
function testA() {
$limit = $this->limit;
$time_start = microtime(true);
for ($i = 0; $i < $limit; ++$i) {
TestConstants::TEST_CONSTANT;
}
$time_end = microtime(true);
$execution_time = ($time_end - $time_start);
echo ''. $execution_time .' seconds <br/>';
}
function testB() {
$limit = $this->limit;
$time_start = microtime(true);
for ($i = 0; $i < $limit; ++$i) {
$this->TEST_CONSTANT;
}
$time_end = microtime(true);
$execution_time = ($time_end - $time_start);
echo ''. $execution_time .' seconds <br/>';
}
}
$test = new Test();
$test->testA();
$test->testB();
Результаты следующие
testA () выполняется за 0,55921387672424 секунд
и
testB () выполняется за 0,33076691627502 секунд
Версия PHP
5.6.30
Я подумал поделиться этим, так как кто-то может получить пользу, избегая прямых звонков на constants
( особенно внутри петель), объявив их как variables
, где это применимо.
Спасибо.