Проблема в том, что содержимое $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; }