当我在函数中有硬编码数据时,我可以正常初始化变量:
function check_country() {
$countries = array(
'aa',
'ab',
'ae',
...
);
}
PHP只会将$countries
指向指向内存中的文字数据,还是将所有初始化数据复制到新的ZVAL或其他什么?< / p>
如果后者基本上与此相当,那不是吗?
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)需要两倍的内存?
答案 0 :(得分:5)
要将变量设为静态,只需在其前加static
个关键字。不需要if (!isset($countries))
等额外检查;
“动态”实现会消耗更多的CPU,因为每次调用该函数时都会创建另一个新的局部变量;
“静态”实现消耗更多内存,因为静态变量在堆中分配(如全局变量)并且它们一直存在,直到脚本完成执行。
结论:你不会注意到它们之间有任何合理的区别(只要你不创建几兆字节大小的数组) - 所以选择你更喜欢的那个(大概是第一个)。
答案 1 :(得分:0)
在static
变体的zerkms answered旁边,您可以初始化变量并省略if
:
function check_country() {
static $countries = array(
'aa',
'ab',
'ae',
...
);
}
}
只要初始数据也具有静态性质(常量)(就像你的情况一样)。