function benchmark($func_name, $iterations) {
$begin = microtime(true);
for ($i = 0; $i < $iterations; $i++) {
$func_name();
}
$end = microtime(true);
$execution_time = $end - $begin;
echo $func_name , ': ' , $execution_time;
}
function standClass() {
$obj = new stdClass();
$obj->param_one = 1;
$obj->param_two = 2;
}
function castFromArray() {
$obj = (object)array('param_one' => 1, 'param_two' => 2);
}
benchmark('standClass', 1000);
benchmark('castFromArray', 1000);
benchmark('standClass', 100000);
benchmark('castFromArray', 100000);
Выходы:
standClass: 0.0045979022979736
castFromArray: 0.0053138732910156
standClass: 0.27266097068787
castFromArray: 0.20209217071533
Преобразование из массива в stdClass на лету примерно на 30% эффективнее, но разница по-прежнему незначительна, пока вы не узнаете, что будете выполнять операцию 100 000 раз(и даже тогда, вы смотрите только одну десятую секунды, по крайней мере, на моей машине).
Итак, в общем, это не имеет значения в подавляющем большинстве случаев, но еслион определяет массив в одной команде, а затем приводит его к типу объекта.Я определенно не стал бы тратить время на беспокойство об этом, если вы не определили рассматриваемый код как узкое место (и даже тогда, если возможно, сосредоточитесь на сокращении количества итераций).