PHP似乎是按引用分配,而不是按值分配

I am using the following code:

$input = new DateTime(filter_input(INPUT_GET, 'date'));
$input->modify('midnight');

echo $input->format(DateTime::RFC3339) . "
";

$end = $input;
$end->modify('+3 hours');
echo $input->format(DateTime::RFC3339) . "
";
echo $end->format(DateTime::RFC3339) . "
";

Which is giving the following output:

2016-02-01T00:00:00-5:00
2016-02-01T03:00:00-5:00
2016-02-01T03:00:00-5:00

Shouldn't the output on line two be the same as the first?

From what I understand to assign a variable by reference you need to use $a = &$b, so what I am using ($a = $b) should be by value. So an function called on $end should not modify $input as well, correct? What am I missing?

Problem is that DateTime is object and objects is assigned always by reference. If you want assign by "value", you must use cloning like $end = clone $input;.

Here is information about it in PHP manual: http://php.net/manual/en/language.oop5.references.php