我们可以为常量或变量赋值。从记忆和优化的角度来看哪个更好?
define("X",5);
或
$x = 5;
两种情况下整数都占用相同的内存吗?哪一个占用更多内存空间并且运行速度更快?
我已经在命令提示符下的php.exe中分析了这个任务100k次并在这里解释......
//Defining a constant Test
$DefConst_TimeStart = microtime();
$DefConst_MemStart = memory_get_usage();
for($i=1;$i<=100000;$i++){
define("x$i",$i);
}
$DefConst_MemEnd = memory_get_usage();
$DefConst_TimeEnd = microtime();
//Variable test
$Variable_TimeStart = microtime();
$Variable_MemStart = memory_get_usage();
for($i=1;$i<=100000;$i++){
${"x".$i} = $i;
}
$Variable_MemEnd = memory_get_usage();
$Variable_TimeEnd = microtime();
//Output of the results
echo "Define Constant: Time: ".($DefConst_TimeEnd - $DefConst_TimeStart)." ms | Memory: ".($DefConst_MemEnd - $DefConst_MemStart)." Bytes\n";
echo "Setting Variable: Time: ".($Variable_TimeEnd - $Variable_TimeStart)." ms | Memory: ".($Variable_MemEnd - $Variable_MemStart)." Bytes\n";
根据分析:
所花费的时间:变量执行速度快而不是常量
内存使用:常量占用的内存少于变量
输出图像
您可以从github下载文件进行测试
Benchmark example to test speed and memory usage
让我知道我是否在正确的轨道上?
答案 0 :(得分:2)
分配单个变量和定义单个常量之间的差异可能非常小,以至于程序其余部分的随机变化会使其相形见绌。
两者都是高级构造,在复杂类型结构中注册名称和值之间的关联,受基础引擎中的各种优化和特殊情况的影响。
如果你有数百个这样的定义,你可能会开始注意到一个小的差别,但在那时你的程序设计有问题。
答案 1 :(得分:1)
我更喜欢使用变量,因为声明变量本身不需要调用函数,而define是一个定义值的函数。