PHP передает массив в класс - PullRequest
0 голосов
/ 27 декабря 2011

У меня есть массив с около 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 ]

4 голосов
/ 27 декабря 2011

True.Но в теории массив копируется как значение .Просто внутри PHP он не будет дублирован в памяти ... если только один из ваших объектов не начнет изменять этот переданный массив.

В этом случае вы можете передать явное & ссылаться скорее, или даже преобразовать его в ArrayObject ранее.(Опять же: практически не нужно, если вы не планируете редактировать массив.)

1 голос
/ 27 декабря 2011

Да, вы создаете 100 копий, поскольку по умолчанию скалярные аргументы и аргументы массива передаются по значению, а не по ссылке, в методы класса в PHP.

Чтобы метод получил аргумент по ссылке, вам нужно изменить сигнатуру метода, добавив амперсанд к имени параметра, например:

public function doSomething( &$argument )
{
}

редактирование:
Более точный отчет о внутренней работе см. В ответ Марио .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...