2014-10-08 27 views
1

我創建的基礎上創建的第一個兩個日期時間函數:爲什麼我的變量通過引用傳遞?

// 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 

就目前而言,一切的權利。現在,我通過這些日期時間到我用一個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未在本地修改參數。它改變函數外部的$日期的值。但我從不使用引用傳遞。

任何人都可以啓發我嗎?

+1

對象(基本上)通過引用傳遞。參見這裏瞭解更多詳情:http://php.net/manual/en/language.oop5.references.php – Steve 2014-10-08 12:52:06

回答

2

正如其他人已經注意到,在PHP中的所有對象都通過by reference

如果您想要改變保持原始的完整對象,則應該使用clone keyword

$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