Я создал функцию, которая создала две даты и времени на основе первой:
// initial datetime (for test)
$dt = new \Datetime;
$dt->setDate(2012, 9, 5);
// splitting into 2 different datetimes
$dates = $this->defineLimitsByDate($dt);
// $dates[0] = 2011-07-01
// $dates[1] = 2012-09-01
На данный момент все правильно. Теперь я передаю эти datetime в другую функцию, в которой я использую while
цикл, который увеличивает первую дату, пока она не достигнет второй:
// now I use the 2 datetimes into a function...
$dateKeys = $this->generateDateKeys($dates[0], $dates[1]);
// and the function seems to modify them outside itself !
// $dates[0] = 2012-10-01
// $dates[1] = 2012-09-01
Кажется, что цикл while внутри моей функции generateDateKeys
не локально изменяет параметры. Это изменяет значение $ date вне функции. Но я никогда не использую передачу ссылок.
Может ли кто-нибудь просветить меня об этом?
PHP передает все объекты по ссылке, по умолчанию.
Больше информации здесь: http://php.net/manual/en/language.oop5.references.php
Как заметили другие, все объекты в PHP передаются по ссылке.
Если вы хотите изменить объект, сохранив оригинал, вы должны использовать ключевое слово клон.
$originalDate = new \DateTime;
$originalDate->setDate(2010,1,1);
$newDate = clone $originalDate;
$newDate->addYears(1); // pseudo function
// first date is still 2010.01.01, second is 2011.01.01