函数中的硬编码数据应该是静态的吗?

时间:2012-12-20 01:49:03

标签: php

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

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

2 个答案:

答案 0 :(得分:5)

  • 要将变量设为静态,只需在其前加static个关键字。不需要if (!isset($countries))等额外检查;

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

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

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

答案 1 :(得分:0)

static变体的zerkms answered旁边,您可以初始化变量并省略if

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

只要初始数据也具有静态性质(常量)(就像你的情况一样)。