3

当我在函数中硬编码数据时,我可以正常初始化变量:

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) 需要两倍的内存?

4

2 回答 2

5
  • 要使变量静态,只需在其前面加上static关键字。无需额外检查if (!isset($countries))

  • “动态”实现会消耗更多 CPU,因为每次调用函数时都会创建另一个新的局部变量;

  • “静态”实现会消耗更多内存,因为静态变量是在堆中分配的(如全局变量),并且它们一直存在,直到脚本完成执行。

结论:你不会注意到它们之间有任何合理的区别(只要你不创建几兆字节大小的数组)——所以选择你更喜欢的一个(大概是第一个)。

于 2012-12-20T02:03:36.710 回答
0

在zerkms 回答的内容旁边,对于static变体,您可以初始化变量并保留if

function check_country() {
  static $countries = array(
      'aa',
      'ab',
      'ae',
      ...
    );
  }    
}

只要初始数据也具有静态性质(恒定)(如您的情况)。

于 2012-12-20T02:14:11.387 回答