使用两种结构中的一种比另一种结构有什么好处?
// array
$user['name'] = 'Emanuil';
// object
$user->name = 'Emanuil';
Run Code Online (Sandbox Code Playgroud)
Ken*_*ins 33
数组
array_*,可以在阵列中,其中大部分是非常快的工作职能.对象
__get,__set,等)只需运行一个简单的测试:
$ts_o = microtime(true);
for($i=0;$i<=1000;$i++)
{
new stdClass();
}
$total_object = microtime(true) - $ts_o;
Run Code Online (Sandbox Code Playgroud)
与:
$ts_a = microtime(true);
for($i=0;$i<=1000;$i++)
{
array();
}
$total_array = microtime(true) - $ts_a;
Run Code Online (Sandbox Code Playgroud)
并计算他的结果.
echo 'Object: ' . $total_object . ' / Array: ' . $total_array;
Run Code Online (Sandbox Code Playgroud)
结果:对象:0.002635 /阵列:0.001243
正如您所看到的,Arrays在速度方面更快,平均值为46.6%.
但是当你开始添加变量时,他们会突然转身:
$ts_o = microtime(true);
for($i=0;$i<=1000;$i++)
{
$var = new stdClass();
$var->booleon = true;
}
$total_object = microtime(true) - $ts_o;
unset($var);
$ts_a = microtime(true);
for($i=0;$i<=1000;$i++)
{
$var = array();
$var['booleon'] = true;
}
$total_array = microtime(true) - $ts_a;
echo 'Object: ' . ($total_object) . ' / Array: ' . $total_array;
Run Code Online (Sandbox Code Playgroud)
新结果:0.0037809 /数组:0.0046189
您需要进行一些测试,然后在测试结束时找到您的平均值/模式,以找到真正更好的实体.
你可以通过以下方式对内存进行测试memory_get_usage:http://php.net/manual/en/function.memory-get-usage.php,原理相同.
你在做什么?这两种结构都不是更好,这就是两者都存在的原因.所以它真的取决于你的问题集"更好".即便如此,它可能只是您喜欢的情况.许多架构和代码设计都是个人偏好和风格.
现在,通常,我只有一次stdclass在数组上使用无方法对象(或自定义的对象).如果我需要经常传递那些数据并在多个地方修改它.对于一个数组,你需要通过引用传递它,这会很麻烦,并且会引入错误源...对于一个对象,它默认传递为对象引用(不是变量引用,而是指向它的指针)宾语).因此,使用数组,您需要执行以下操作:
function doSomething($inVar, array &$inOutArray) {
$inOutArray['bar'] = 'baz';
}
Run Code Online (Sandbox Code Playgroud)
对于修改(或可能修改)数组的每个函数.
而对于一个对象,你可以这样做:
function doSomething($inVar, $object) {
$object->bar = 'baz';
}
Run Code Online (Sandbox Code Playgroud)
它更短(当然,只有一个字符,但它可能是你想修改数组的一个字符).它不容易出错,因为如果你以后这样做$object = new Something(),它将不会改变原始对象(因为它不是变量引用)...
唯一的论点是它的可读性稍差,因为&显示您明确打算修改该输入变量.但是,如果您了解对象在PHP 5中是如何工作的,那么您不应该措手不及(因此在我看来这是一个可接受的权衡)......
| 归档时间: |
|
| 查看次数: |
15796 次 |
| 最近记录: |