当我在函数中硬编码数据时,我可以正常初始化变量:
function check_country() {
$countries = array(
'aa',
'ab',
'ae',
...
);
}
PHP 只是让$countries
指向 到内存中的文字数据还是复制所有初始化数据到一个新的 ZVAL还是什么?
如果它做的是后者,那么基本上等同于此,不是吗?
function check_country() {
$countries = array();
$countries[] = 'aa';
$countries[] = 'ab';
$countries[] = 'ae';
}
另一种方法是使变量成为静态变量并像这样对其进行初始化:
function check_country() {
static $countries;
if (!isset($countries))
{
$countries = array(
'aa',
'ab',
'ae',
...
);
}
}
这种技术是否 a) 更快并且 b) 需要两倍的内存?
最佳答案
要使变量成为静态变量,只需在其前面加上
static
关键字即可。不需要像if (!isset($countries))
这样的额外检查;“动态”实现会消耗更多 CPU,因为每次调用函数时都会创建另一个新的局部变量;
“静态”实现会消耗更多内存,因为静态变量是在堆中分配的(与全局变量一样),并且它们一直存在直到脚本执行完毕。
结论:您不会注意到它们之间有任何合理的差异(只要您不创建几兆字节大小的数组)- 因此请选择您更喜欢的一个(大概是第一个)。
关于php - 函数中的硬编码数据应该是静态的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13964092/