Скорость доступа к значению фиксации в PHP - PullRequest
0 голосов
/ 29 июня 2009

Высокоскоростной ли прямой доступ и постоянная функция? (Или меньше памяти, процессор)

define("FOO","VAL");
print FOO;
print constant(FOO);

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

редактировать: Я извиняюсь, неправильно понял это очень

печать FOO или постоянная печати (FOO)

Какая скорость?

Ответы [ 3 ]

2 голосов
/ 29 июня 2009

Я не уверен, откуда у вас 2 константы () константа (), но функция constant () - это метод получения, который принимает только один аргумент: имя константы, которую вы хотите получить.

define (), с другой стороны, определяет значение константы (установщика). Сравнение производительности этих двух функций не имеет особого смысла, поскольку они выполняют совершенно разные задачи.

0 голосов
/ 29 июня 2009

Я думаю, вы неправильно понимаете, для чего используется constant (). Если вам нужен только доступ к константе, сделайте это напрямую: print FOO;

Если вы не знаете, к какой константе вы хотите получить доступ, вам нужна константа (). То есть Вы можете сделать «переменные переменные» следующим образом:

$name = 'var1';
$var1 = 'value something or other';
print $$name; // prints the value of $var1: 'value something or other' because:

${$name} -> ${"var1"} -> $var1 -> 'value something or other'

т.е. вы подставляете имя переменной через переменную.

Вы не можете сделать это с константами:

$name = 'CONST1';
define('CONST1', 'value something or other');
print $name; // prints the value of $name: 'CONST1'

Вам нужно будет использовать константу ():

print constant($name); // prints 'value something or other'
0 голосов
/ 29 июня 2009

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

define("FOO", "VAL");
$iterations = 10000;
$start_1 = microtime(true);
for ($i = 0; $i < $iterations; $i++) {
    print FOO;
}
$end_1 = microtime(true);
$time_1 = $end_1 - $start_1;

$start_2 = microtime(true);
for ($i = 0; $i < $iterations; $i++) {
    print constant('FOO');
}
$end_2 = microtime(true);
$time_2 = $end_2 - $start_2;

printf('"print VAL;" %d iterations: %.5F s', $iterations, $time_1);
print PHP_EOL;
printf('"print constant(\'FOO\');" %d iterations: %.5F s', $iterations, $time_2);

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...