哪个更好,常量或变量?

时间:2015-08-11 04:55:29

标签: php memory optimization

我们可以为常量或变量赋值。从记忆和优化的角度来看哪个更好?

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";

根据分析:

所花费的时间:变量执行速度快而不是常量

内存使用:常量占用的内存少于变量

输出图像

enter image description here

您可以从github下载文件进行测试

Benchmark example to test speed and memory usage

让我知道我是否在正确的轨道上?

2 个答案:

答案 0 :(得分:2)

分配单个变量和定义单个常量之间的差异可能非常小,以至于程序其余部分的随机变化会使其相形见绌。

两者都是高级构造,在复杂类型结构中注册名称和值之间的关联,受基础引擎中的各种优化和特殊情况的影响。

如果你有数百个这样的定义,你可能会开始注意到一个小的差别,但在那时你的程序设计有问题。

答案 1 :(得分:1)

我更喜欢使用变量,因为声明变量本身不需要调用函数,而define是一个定义值的函数。