#1.上测试效果截图
#2.测试代码(可以自行运行测)
<?php
ini_set('memory_limit', '5G');
/**
* 整数转小数
* @param $num
* @param $length
* @return false|string
*/
function roundNum($num, $length)
{
if ($len = strpos($num, '.')) {
$dianNum = substr($num, $len + 1, $len + $length + 1);
if (strlen($dianNum) >= $length) return substr($num, 0, $len + $length + 1);
}
return $num;
}
/**
* 获取大小到字符串
* @param $size
* @return string
*/
function getSizeToString($size)
{
$units = [' B', ' KB', ' MB', ' GB', ' TB'];
for ($i = 0; $size >= 1024 && $i < 4; $i++) $size /= 1024;
if ($size > 1000) {
$i++;
$size = $size / 1024;
}
$size = roundNum($size, 2);
return $size . $units[$i];
}
class Entity
{
public $i;
public function __construct($i)
{
$this->i = $i;
}
}
class StdEntity
{
public function __construct($i)
{
$this->i = $i;
}
}
$count = 10000000; //千万次
/**
* 测试数组
* @param $count
*/
function testArray($count)
{
$oldMemory = memory_get_usage();
$timeTime = time();
$list = [];
for ($i = 0; $i < $count; $i++) {
$list[] = ['i' => $i];
}
$endTime = time();
$newMemory = memory_get_usage();
echo "数组{$count}个:内存消耗" . (getSizeToString($newMemory - $oldMemory)) . ",总耗时:" . ($endTime - $timeTime) . "秒\n";
}
/**
* 测试实例类对象
* @param $count
*/
function testObject($count)
{
$oldMemory = memory_get_usage();
$timeTime = time();
$list = [];
for ($i = 0; $i < $count; $i++) {
$list[] = new Entity($i);
}
$endTime = time();
$newMemory = memory_get_usage();
echo "对象{$count}个:内存消耗" . (getSizeToString($newMemory - $oldMemory)) . ",总耗时:" . ($endTime - $timeTime) . "秒\n";
}
/**
* 测试匿名类对象
* @param $count
*/
function testStdObject($count)
{
$oldMemory = memory_get_usage();
$timeTime = time();
$list = [];
for ($i = 0; $i < $count; $i++) {
$list[] = new StdEntity($i);
}
$endTime = time();
$newMemory = memory_get_usage();
echo "匿名对象{$count}个:内存消耗" . (getSizeToString($newMemory - $oldMemory)) . ",总耗时:" . ($endTime - $timeTime) . "秒\n";
}
testArray($count);
//testObject($count);
//testStdObject($count);
3.总结
1.少用数组
1.大项目不利于维护,万一哪天修改了数据结构,改key,改到你怀疑人生,关键idea不给你报错,你只能自己找
2.整体效率也不是很高,比实体对象慢
3.特占内存
2.多用实体对象,少用匿名对象
1.上图中我们也可以看出,匿名对象效率比数组还低,占用内存更高,速度还慢,还不利于维护
2.实体对象可以利于维护,后期数据结构修改了,至少idea能给你报错,能快速定位问题