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

标签 php

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

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/

相关文章:

php - 附近的 MySQL 语法错误

php - 如何在laravel 5.4中仅获取created_at日期而不是时间

php - 如何阻止 Varnish 缓存站点地图?

php - 如何告诉 PHPStorm 调试器,我的项目有项目根目录以外的文档根目录

php - Kohana 框架发生了什么?

php - 无需第三方服务即可同步移动应用程序和网络应用程序

php Y-m-d 添加 H :i:s

php - 被显示图像卡住了

PHP DateInterval 格式分钟和秒带前导零

php - 显示特定字段的所有结果以及带有内连接的其余结果