为什么我的变量通过引用传递?

时间:2014-10-08 12:50:08

标签: php function variables datetime reference

我创建了一个基于第一个创建两个日期时间的函数:

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

似乎我的函数generateDateKeys中的while循环不是在本地修改参数。它会更改函数外的$ date值。但我从不使用参考传递。

任何人都可以启发我吗?

2 个答案:

答案 0 :(得分:3)

默认情况下,PHP通过引用传递所有对象。

此处有更多信息:http://php.net/manual/en/language.oop5.references.php

答案 1 :(得分: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