使用数组 VS 对象存储数据

php
2022-08-30 16:57:38

可能的重复:
我什么时候应该使用stdClass,什么时候应该在php5 oo代码中使用数组?

与使用另一种结构相比,使用两种结构中的一种有什么好处?

// array
$user['name'] = 'Emanuil';

// object
$user->name = 'Emanuil';

答案 1

阵 列

  • 有大量的函数可以在数组上工作,其中大多数都非常快。array_*
  • 默认情况下,它们按值传递(复制周围)
  • 轻量级/简单(更改仅影响局部变量,较少考虑)
  • 通常用于一次构建数据(不会更改的数据)
  • 所有数据都是公开的
  • 资源密集程度略低

对象

  • 可以使用方法来使数据更加严格。(即检查字段是否适合格式)
  • 子类化(减少代码重复)
  • 默认情况下,它们通过引用传递
  • 对数据的更改可能会产生级联效应(、 等)__get__set
  • 通常用于更可变的数据
  • 可以通过函数和受保护/私有变量保护数据免受外部侵害
  • 对象的函数类型提示更灵活(不同的类有不同的类型)

答案 2

只需运行一个简单的测试:

$ts_o = microtime(true);
for($i=0;$i<=1000;$i++)
{
    new stdClass();
}
$total_object = microtime(true) - $ts_o;

对:

$ts_a = microtime(true);
for($i=0;$i<=1000;$i++)
{
    array();
}
$total_array = microtime(true) - $ts_a;

并计算他的结果。

echo 'Object: ' . $total_object . ' / Array: ' . $total_array;

结果: 对象: 0.002635 / 数组: 0.001243

如您所见,数组在速度方面更快,实际上平均为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;

新结果: 0.0037809 / 数组: 0.0046189

您必须进行一些测试,然后在测试结束时找到您的平均值/模式,以找到真正更好的实体。

你可以通过执行具有相同原理的 http://php.net/manual/en/function.memory-get-usage.php 对内存进行测试。memory_get_usage


推荐