2
这两者之间是否有任何性能差异?阵列初始化性能差异
$rules['a']['x'] = 'someValue';
$rules['a']['y'] = 'anotherValue';
和
$rules['a'] = [
'x' => 'someValue',
'y' => 'anotherValue',
];
这两者之间是否有任何性能差异?阵列初始化性能差异
$rules['a']['x'] = 'someValue';
$rules['a']['y'] = 'anotherValue';
和
$rules['a'] = [
'x' => 'someValue',
'y' => 'anotherValue',
];
正如其他人所指出的,任何差别将是可忽略的,你不应该关心这个。
尽管如此,第二种方法在技术上应该是更高性能的,因为(至少它看起来)它在单个指令中完成了整个事情。
当你这样做:
$rules['a']['x'] = 'someValue';
$rules['a']['y'] = 'anotherValue';
... PHP引擎必须先检查$rules
是否存在,无论它是一个数组,(在这种情况下和错误)的ArrayAccess
对象与否。之后,它必须为$rules['a']
做同样的事情。
它必须这样做两次,因为两行代表不同的表达式。
而在另一方面:
$rules['a'] = [
'x' => 'someValue',
'y' => 'anotherValue',
];
...只会检查什么$rules
是(不关心$rules['a']
是否存在它是什么类型),它只有做一次。
请注意,这是一个非常,非常简化解释,也有很多的发挥作用,有所作为的其他因素。但是,这是使用像PHP这样的高级语言的好处 - 一般来说,您不必关心甚至不知道现场幕后的工作情况。
如果你想进行性能优化,这当然是错误的看待。找出你的“瓶颈”在哪里并对它们进行处理(专业提示:10次中有9次,这是你的数据库查询)。
[1st](https://3v4l.org/pI9Ap/perf#output)和[2nd](https://3v4l.org/EjVfZ/perf#output),我怀疑它会有很大的不同。 – Script47
你可以自己测试。做一些像'$ startTime = microtime(true); for($ i = 0; $ i <100000; $ i ++){$ rules ['a'] ['x'] ='someValue'; $ rules ['a'] ['y'] ='anotherValue';} echo'total time ='。 microtime(true) - $ startTime;'和orher情况相同。但是,我也不会做出很大的改变。 –
@Tobias F是的确切我还建议这一个 –