PHP将数组传递给类

时间:2011-12-27 01:42:52

标签: php pointers

我有一个包含大约300个索引的数组,每个索引有大约8个“子索引”(?)。所以它是一个大型(ish)数组。我正在努力将我的代码转换为oop样式,我的一个类(颜色)将需要将此数组作为参数传递。所以我的问题很简单....如果我创建100个颜色类并传递每个数组我不会创建100个单独的数组只需要100个指针?

$colors['Apricot'] = array(250,180,160,3341,328,826,194,3332,0);
$colors['Apricot, Light'] = array(255,230,225,3824,8,833,2605,-1,1);

$x=new color();
$y=new color();
$z=new color();

$x->doSomething($colors);
$y->doSomething($colors);
$z->doSomething($colors);

你仍然只是阵列的一个副本,而不是三个?

谢谢你, 托德

2 个答案:

答案 0 :(得分:4)

真。但理论上,数组被复制为值。这只是PHP内部它不会在内存中重复 ...除非你的一个对象开始修改传递的数组。

在这种情况下,您可以传递显式&引用,甚至可以将其转换为ArrayObject之前的引用。 (同样:如果你不打算编辑数组,几乎没有必要。)

答案 1 :(得分:1)

是的,您正在创建100个副本,因为标量和数组参数默认情况下是按值传递给PHP中的类方法,而不是通过引用传递。

为了让方法通过引用接受参数,你必须通过在参数名前加一个和号来改变方法签名,如下所示:

public function doSomething( &$argument )
{
}

修改
有关内部工作的更准确说明,请参阅mario's answer