这是个主意:
<?php
$postESDate = 0;
$sDate = $postESDate;
$esDate = $sDate + 25;
echo $sDate.' ------- ';
echo $esDate;
?>
当你回应第二和第三个变量时它们是不同的,对吧?
修改日期时不一样,请尝试以下代码......
//fails
$postESDate = '2017-04-15';
$sDate = new DateTime($postESDate);
$esDate = $sDate->modify('+25 days')->format('l jS F Y');
$sDate = $sDate->format('l jS F Y');
echo $sDate.' ------- ';
echo $esDate;
这个回声的日期相同。问题是它实际上是用+25天更新$ sDate而不是仅仅按照我的要求将输出保存到$ esDate所以因此第二个日期格式现在也是+25天..相同。
修复是为了制作另一个DateTime变量:
//works
$postESDate = '2017-04-15';
$sDate = new DateTime($postESDate);
$esDate = new DateTime($postESDate);
$esDate = $esDate->modify('+25 days')->format('l jS F Y');
$sDate = $sDate->format('l jS F Y');
echo $sDate.' ------- '
echo $esDate;
这不应该发生,或者我错过了什么?好吧,至少我有一个解决方法。
答案 0 :(得分:1)
如果您阅读php.net处的文档,则会发现这是预期的行为。 modify
改变你调用的对象modify
的时间戳,然后返回它进行方法链接 - 这正是你在那里所做的。
答案 1 :(得分:0)
当涉及对象时,这是常见的行为。 变量的行为就像您提到的那样,每个变量都是它们自己的,是的,但是对象的行为不同。
您可以在此处看到相同的行为,例如:
$test = new stdClass();
$test->sample = "What!?";
$another = $test;
$another->sample = "Impossibru!";
echo $another->sample . "<br>";
echo $test->sample . "<br>";
除非您克隆此对象或创建它的新实例,否则它们将通过引用传递。