使用'参考'分配的日期变量不当?

时间:2014-09-21 03:25:23

标签: php date pointers reference variable-assignment

我正在经历一些对我来说很奇怪的事情,希望对此有第二意见。

似乎我的日期变量正在应用'参考'在任职期间他们不应该。

示例:

$date1 = date_create('2014-09-20');

$date2 = $date1;

date_add($date2,date_interval_create_from_date_string("1 month"));

// I would expect this to print "2014-09-20". However it is printing "2014-10-20"
echo date_format($date1,'Y-m-d') . "<br>";

//I would expect this to print "2014-10-20". It does so.
echo date_format($date2,'Y-m-d') . "<br>";

基本上,每当我更改$ date2时,它也会更改$ date1中存储的值。

我疯了吗?这是正确的行为吗?我的编译器有问题吗? php.ini中的东西?我是否只是用PHP语法理解一些非常简单的概念?

我在IIS 7.5.7600,Windows 7上使用PHP 5.3.28。通过Firefox 32或任何当前版本的#访问页面#他们已经到了...

我已尝试使用&#34; New Datetime&#34; / Add(New DateInterval)方法,并使用date_create / date_add,如上例所示。尝试先创建变量然后分配它们。相同的结果。尝试添加&#39;&amp;&#39;到任务只是为了看看会发生什么。结果相同。

我使用相同的模式并使用整数没有麻烦:

$int1 = 1;

$int2 = $int1;

$int2 = $int2 + 1;

echo "$int1 <br>"; //prints 1

echo "$int2 <br>"; //prints 2

就像在日期变量上有引用/指针一样,即使没有指定任何引用/指针。

感谢您的帮助..

3 个答案:

答案 0 :(得分:1)

不,你不是疯了,这将是行为,如果你想要一个单独的对象,以便它不会反映,改为使用clone

$date1 = date_create('2014-09-20');
$date2 = clone $date1; // clone $date1 object

date_add($date2,date_interval_create_from_date_string("1 month"));
echo date_format($date1,'Y-m-d') . "<br>"; // 2014-09-20


echo date_format($date2,'Y-m-d') . "<br>"; // 2014-10-20

答案 1 :(得分:0)

他们确实引用了同一个对象。以下代码可以使用debug_zval_dump:

为您提供一些见解
<?php
$date1 = date_create('2014-09-20');
$date2 = $date1;
$date3 = date_create('2014-09-20');
echo debug_zval_dump($date1, $date2, $date3);
?>

答案 2 :(得分:0)

感谢您的回答。

我想添加一些东西,现在已经用你的答案做了一些阅读:

它的行为方式是因为DateTime不是本机数据类型,而是一个类。因此,当我们处理日期变量时,我们真正处理的是类的实例。这种指向对象的指针,而不是对象的副本,是PHP中所有类对象的行为。