PHP静态数组解决方案
我有一个数组结构,包含多个维度的键和值对。我想在类中使用这个数组,但我不想将它添加到每个实例中,因为它只是该类所需的引用 这是我通过Google和Stack Overflow搜索提出的解决方法。它可以满足我的需要,但是有经验的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));
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使用写时复制。只有在更改数组时,才创建副本,而不是在传递数组时创建副本。按引用传递是一种逻辑操作,而不是内存优化操作。如果您想通过引用传递,因为您需要更改原始文件,则只能通过引用传递。