CODE – содержимое объекта изменяется после выполнения функции

Проблема в том, что содержимое $oldpop получает волшебное изменение после выполнения функции func , тогда как ввод func$matepop . Внутри func , $oldpop не используется (я добавил строку комментария, чтобы показать это место – см. Конец фрагмента кода MAIN.PHP ). Ниже я предоставляю только некоторые основные части кода. Может быть, кто-то может предложить причину проблемы?

Я должен упомянуть, что я не использую статические переменные.

Файл MAIN.PHP

 include_once 'func.php'; include_once 'select.php'; class Individual { private $genes; private $rank; public function __construct() { $this->genes = array(); $this->rank = 0; } public function setRank($val){ $this->rank = $val; } public function setGene($i,$val){ $this->genes[$i] = $val; } } class Population { private $ind; public function __construct() { $this->ind = array(); } public function addIndividual(Individual $ind) { $this->ind[] = $ind; } public function getIndividual($i){ return $this->ind[$i]; } } $oldpop = new Population(); for($i=0; $i<$popsize; $i++) { $oldpop->addIndividual(new Individual()); } $oldpop = func($oldpop,$popsize); for ($i = 0; $i < $gener; $i++) { $matepop = new Population(); $matepop = nselect($matepop,$oldpop,$popsize); // !!! Here the $oldpop content is correct (original) $matepop = func($matepop,$popsize); // !!!! Here the original content of $oldpop is magically changed } 

Файл SELECT.PHP

 function nselect($matepop,$oldpop,$popsize) { $select = array(); //... $select[] = $oldpop->getIndividual($i); //... for ($i=0; $i < $popsize; $i++) { $matepop->addIndividual($select[$i]); } return $matepop; } 

Файл FUNC.PHP

 function func($pop,$popsize) { //... $pop->getIndividual($i)->setRank($val); //... return $pop; }