LINUX.ORG.RU

Что быстрее?

Предположу, что первый вариант наверняка быстрее, потому что декларация.

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

PolarFox ★★★★★
()

А самому попробовать? Получаешь текущее системное время в миллисекундах или микросекундах (там есть какая-то функция для этого), выполняешь в цикле несколько десятков тысяч раз первый вариант, опять узнаёшь время, выполняешь столько же раз второй вариант. Затем находишь разницу данных времени и выводишь.

KivApple ★★★★★
()
Ответ на: комментарий от rikardoac

Не знаю, как в потрохах PHP реализовано, но по логике в первом случае одна операция загрузки массива, во втором — пять операций. Инициализация и четыре присваивания с реаллокацией памяти каждый раз.

Первый вариант должен быть быстрее.

KRoN73 ★★★★★
()

сабж не очень эффективен при работе с массивами, особенно ассоциативными - в общем разницы нет, но микрооптимизация будет в первом случае. Если движок на сях умеет оптимизировать создание массива, то тем более - но не на много. Смотри opcode этого куска - обычно это выглядит идентично для обоих случаев.

Вся оптимизация будет сведена к минимуму, когда ты это будешь передавать в качестве параметра. Массивы в параметрах будут копироваться на внутреннем уровне. Если у тебя будет достаточно глубокая вложенность и много циклов, то быстро наберешь пик памяти в районе 500МБ.

В этом плане можно поэкспериментировать так, если это будет передаваться как параметр - объекты всегда передаются по ссылке:

$o = (object) [
    'param1' => 'val1',
    'param2' => 'val2',
    'param3' => 'val3',
    'param4' => 'val4'
];
...
var_dump($o->param1);
...
Ну и разумеется, если есть возможность и уместно: делать объявление «static».

swwwfactory ★★
()
Ответ на: комментарий от rikardoac

Не спорю, но существенных тормозов все-равно ждать не стоит.

Если в проекте будет тормозить такой код — то задача уже явно не для PHP :)

KRoN73 ★★★★★
()

Тут многие отписали что первый, но я допустил бы что наоборот. Возможно первый вариант приведет к созданию лишних tuple вида 'param1' => 'val1', которые будут сразу обработаны конструктором и удалены. Во втором такого нет

vertexua ★★★★★
()

Если экономить на пустом месте, то уж так:

$arr = Array
(
      'val1' //param1
    , 'val2' //param2
    , 'val3' //param3
    , 'val4' //param4
);

metrokto ★★
()
Ответ на: комментарий от metrokto

Если бы был нужен не асоциативный массив - я бы так и написал. Да и не в экономии дело, пару дней назад в каком-то пыхпых-треде проскочило что «эти стрелки дико медлительны», без пруфов. Вот решил спросить что по этому поводу думает лоровец.

NeverLoved ★★★★★
() автор топика
Ответ на: комментарий от swwwfactory

Массивы в параметрах будут копироваться на внутреннем уровне.

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

k_andy ★★★
()

абсолютно один и тот же хрен. но первая запись логичнее

chg ★★★★★
()

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

qnikst ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.