常量和变量哪个更好?

3

我们可以给常量或变量赋值。从内存和优化的角度来看,哪个更好?

define("X",5);

或者

$x = 5;

在这两种情况下,整数占用的内存是否相同?哪个更占用内存空间且运行速度更快?

我已经在命令提示符中使用php.exe分析了这个任务100,000次,并在此进行说明...

//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下载文件进行测试

基准测试示例,以测试速度和内存使用情况

请告诉我我是否正确理解了


我已经阅读了那个问题,但是关于内存优化方面我没有得到确切的答案。 - Yadav Chetan
1
我尝试对一个简单的常量和变量进行基准测试,但在线工具有限。常量基准测试 vs. 变量基准测试 - iDev247
2个回答

2

给单个变量赋值和定义单个常量之间的区别可能微不足道,它会被程序中其他随机变化所淹没。

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

如果您有数百个此类定义,则可能会注意到一些小差异,但此时表示程序设计存在问题。


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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接