Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP静态数组解决方案_Php_Arrays_Class_Static - Fatal编程技术网

PHP静态数组解决方案

PHP静态数组解决方案,php,arrays,class,static,Php,Arrays,Class,Static,我有一个数组结构,包含多个维度的键和值对。我想在类中使用这个数组,但我不想将它添加到每个实例中,因为它只是该类所需的引用 这是我通过Google和Stack Overflow搜索提出的解决方法。它可以满足我的需要,但是有经验的PHP程序员可以看到它有什么明显的问题吗 class Foo { public static function bar($key = null) { $array = array('key'=>array(1,2,3));

我有一个数组结构,包含多个维度的键和值对。我想在类中使用这个数组,但我不想将它添加到每个实例中,因为它只是该类所需的引用

这是我通过Google和Stack Overflow搜索提出的解决方法。它可以满足我的需要,但是有经验的PHP程序员可以看到它有什么明显的问题吗

class Foo {

    public static function bar($key = null) {

        $array = array('key'=>array(1,2,3));

        if ($key && array_key_exists($key, $array)) {
            return $array[$key];
        } else {
            return $array;
        }
    }
}

您可以在类中声明静态变量,然后使用
self
访问它们

class Foo {
  public static $bar = array(...);
  function Foo()
  {
    print_r(self::$bar)
  }
}   
print_r(Foo::$bar); 

您也可以检查。

静态变量不适用于此目的。如果希望具有每个实例的值,只需在OOP上下文中使用它:

class Foo {

    protected $myArray = array();

    public function __construct($array = array())
    {
        $this->myArray = $array;
    }

}

$array1 = array('key' => array(1,2,3));
$array2 = array('key' => array(4,5,6));

$foo1 = new Foo($array1);
$foo2 = new Foo($array2);

为什么不通过引用将数组传递给每个实例呢。这是通过在变量名之前使用
完成的,如下所示:

&$SomeArray;

我喜欢这样,但它需要使用init函数,我希望避免这种情况(这样即使在类启动之前也可以访问数组)。@RedBassett,然后可以在变量声明语句中分配它。请查看我的更新答案。使用
静态
类变量有什么问题?你的变通方案解决了什么问题?实际上,你的初衷是什么?目前还不清楚您试图做什么,因此无法正确回答。他说他不希望每个实例都有值。不,他说他不希望每个实例都有值。对我来说,这意味着它是一个每个实例的值。我不知道为什么这被否决了。你说得对,这是最好的正确方法。以这种方式使用的静态方法是毫无意义的,您也可以使用$\u GLOBALS,因为它将用于相同的目的并导致相同的问题。好的,我看到OP的问题非常模糊,没有意义,并且这个答案不一定是错误的。这取决于你对问题的理解。删除downvote。这与
静态
类变量有什么关系?除了他的问题,什么都没有。他不想将数组作为值传递给类的所有实例。使用静态变量是一种方法,但将数组作为引用传递也是可行的。与按值传递相比,按引用传递的优点是…?您只有一个数组实例。因此,如果有100个对象具有相同的数组,那么仍然只有1个数组,而不是100个。如果按值传递,则每次传递数组时都会复制该数组,因此如果有100个对象,则最终将得到100个数组。否。PHP使用写时复制。只有在更改数组时,才创建副本,而不是在传递数组时创建副本。按引用传递是一种逻辑操作,而不是内存优化操作。如果您想通过引用传递,因为您需要更改原始文件,则只能通过引用传递。