在多个功能中使用同一个大型阵列而不冗余的正确方法? 我没有一个具体的情况,所以我认为这是一个普遍的问题。如果语言很重要,那么答案可能更倾向于PHP

在多个功能中使用同一个大型阵列而不冗余的正确方法? 我没有一个具体的情况,所以我认为这是一个普遍的问题。如果语言很重要,那么答案可能更倾向于PHP,php,global-variables,Php,Global Variables,如果我在多个函数中需要一个大数组(或其他数据类型)的数据,但这些数据不变,我应该如何使用这些数据?例如,可能我有一个数组 $states = array( "AL" => "Alabama", ... "WY" => "Wyoming" ); 显然,这个数组在短期内不需要更改。如果我有五个函数必须使用上述数组,那么最好的解决方案是什么?我的三个想

如果我在多个函数中需要一个大数组(或其他数据类型)的数据,但这些数据不变,我应该如何使用这些数据?例如,可能我有一个数组

$states = array(
                "AL" => "Alabama",
                     ...
                "WY" => "Wyoming"
                );
显然,这个数组在短期内不需要更改。如果我有五个函数必须使用上述数组,那么最好的解决方案是什么?我的三个想法是:

  • 将其声明为全局常量
这似乎是最直接的一个,但是我和一些人交谈过,他们似乎建议避免使用全局变量。如有任何见解,将不胜感激

  • 将其传递到函数中
这对我来说似乎是个坏主意,因为它永远不会改变,函数参数应该是变量的,对吗?更不用说必须将它传递到一个不使用它的函数中,这样它才能被另一个函数使用。这似乎是一个糟糕的做法

  • 让它由函数返回吗
这是一个我没有见过很多人使用的方法,但是我已经用自己的方法多次将mysqli_connect()信息传递给多个函数。它运行得很好。这是否被视为不良做法?我是否应该吸收它并使用一个全局常数

我意识到使用全局常量听起来很明显,但我听过(也读过)不止一个咒语,比如“如果你声明全局变量,你做得不对”等等。有人能解释为什么会这样吗


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

如果您坚持不使用globals(这确实是一个坏习惯!),那么您可以将其“隐藏”在函数中:

function get_state($state_code){
  static $states = array(
                "AL" => "Alabama",
                     ...
                "WY" => "Wyoming"
                );
  return $states[$state_code];
} 

但是,在这种情况下,在我看来,使用全局数组很好,有点像在Java中创建一个Enam。

如果您坚持不使用全局数组(这确实是一个坏习惯!),那么您可以将其“隐藏”在函数中:

function get_state($state_code){
  static $states = array(
                "AL" => "Alabama",
                     ...
                "WY" => "Wyoming"
                );
  return $states[$state_code];
} 

但是,在这种情况下,在我看来,使用全局数组很好,有点像在Java中创建一个Enam。

听起来像是一个包装类,以便将那些显然相关的函数捆绑在一起:

class CountryHelper {

    protected static $states = array('AL' => ..., ...);

    public function foo() {
        self::$states ...
    }

    public function bar() {
        self::$states ...
    }

}

听起来像是一个包装类将那些显然相关的函数捆绑在一起:

class CountryHelper {

    protected static $states = array('AL' => ..., ...);

    public function foo() {
        self::$states ...
    }

    public function bar() {
        self::$states ...
    }

}

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

  • 将其声明为全局常量
首先,常量只能是标量值,因此从技术上讲,您不能拥有“常量”数组。其次,你所说的几乎总是正确的:globals暗示着有更好的方法(除了一些例外)

  • 将其传递到函数中
如果它们实际上是常量(在“现实世界”的意义上,而不是计算机科学意义上),那么您是对的,传递给函数应该被视为代码混乱(除非函数应该从“全局”值的知识中抽象出来,但这是一种特定于领域的体系结构选择)

  • 让它由函数返回吗
叮叮!原因基本上是:任何人都可以访问这些“读”,但只有“函数”可以“写”。我将“函数”放在引号中,因为它也可以是类或单例对象实例。基本上,您提供了一个语义上合适的静态信息提供者


这种方法的一个好处是,在长时间运行的程序中,您可能很少需要数据。在这种情况下,服务提供商可能会被编写为从一些内存不足的持久性中获取值,并在不再需要时释放内存。不需要其他人负责内存管理同样,假设项目在增长,这些数据需要从数据库而不是静态数组加载……如果您集中了访问,这非常容易实现,并且您不需要在整个程序执行过程中都有大量内存,这些内存中的值几乎从来都不存在已访问。

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

  • 将其声明为全局常量
首先,常量只能是标量值,因此从技术上讲,您不能拥有“常量”数组。其次,您所说的几乎总是正确的:全局变量暗示有更好的方法(除了一些例外)

  • 将其传递到函数中
如果它们实际上是常量(在“现实世界”的意义上,而不是计算机科学意义上),那么您是对的,传递给函数应该被视为代码混乱(除非函数应该从“全局”值的知识中抽象出来,但这是一种特定于领域的体系结构选择)

  • 让它由函数返回吗
叮叮!原因基本上是:任何人都可以访问这些“读”,但只有“函数”可以“写”。我将“函数”放在引号中,因为它也可以是类或单例对象实例。基本上,您提供了一个语义上合适的静态信息提供者

这种方法的一个好处是,在长时间运行的程序中,您可能很少需要数据。在这种情况下,服务提供商可能会被编写为从一些内存不足的持久性中获取值,并在不再需要时释放内存。不需要其他人负责内存管理同样,假设项目在增长,这些数据需要从数据库而不是静态数组加载…如果您有ce