在多个函数中使用相同的大型数组而不是多余的正确方法?

Bil*_*rim 1 php global-variables

我没有处理具体情况,所以请考虑更多的一般性问题.如果语言很重要,答案可能更倾向于PHP.

如果我在多个函数中需要大数组(或其他数据类型)的数据,但这不会改变,我应该如何使用该数据?例如,也许我有一个看起来像的数组

$states = array(
                "AL" => "Alabama",
                     ...
                "WY" => "Wyoming"
                );
Run Code Online (Sandbox Code Playgroud)

显然,这个阵列不需要很快改变.如果我有五个必须使用上述数组的函数,那么最佳解决方案是什么?我的三个想法是:

  • 将其声明为全局常量

这个似乎是最直接的,但是我谈过的一些人似乎建议不要使用全局变量.任何见解将不胜感激.

  • 将其传递给函数

这对我来说似乎是一个坏主意,因为它永远不会改变,函数参数应该是变量,对吧?更不用说必须将它传递给不使用它的函数,只是因为它可以被另一个函数使用.这似乎是一种糟糕的做法.

  • 是否由函数返回

这是一个我没有看过很多用过的东西,但是我已经习惯了几次将mysqli_connect()信息传递给多个函数.它工作得很好.这被视为不良做法吗?我应该吮吸它并使用全局常量吗?

我意识到使用全局常量听起来很明显,但我听过(和读过)不止一个咒语,"如果你宣布全局,你做错了"等等.任何人都可以解释为什么会这样吗?

谢谢你能给我的任何见解,伙计们.

Chr*_*hey 5

我的一般建议是建立一个"服务提供者"类,类似于"从函数返回"选项.以下是一些具体的想法:

  • 将其声明为全局常量

首先,常量只能是标量值,因此技术上不能有"常量"数组.其次,你所说的几乎总是正确的:全局变量暗示有更好的方法(有一些例外).

  • 将其传递给函数

如果它们实际上是恒定的(在"现实世界"意义上,而不是计算机科学意义上),那么你是对的,传递给函数应该被认为是代码混乱(除非函数应该从知识中抽象出来"全球"价值,但这是一个特定领域的架构选择.

  • 是否由函数返回

丁丁!原因基本上是这样的:任何人都可以访问这些"读取",但只有"功能"可以"写".我将"function"放在引号中,因为它也可以是类或单例对象实例.基本上,您提供了这种静态信息的语义上合适的提供者.

这种方法的一个好处是,在长期运行的程序中,您可能只需要很少的数据.在这种情况下,服务提供者可以被编写以从一些内存不足持久性中获取值,并在不再需要时释放内存.没有其他人需要对内存管理负责.同样,想象一下项目的增长,这些数据需要从数据库而不是静态数组加载......如果你集中了访问权限,这非常容易实现,而且你不需要在程序执行的整个长度内存在大量内存,其中包含几乎从未访问过的值.