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

时间:2016-02-01 14:32:57

标签: php variable-assignment

我使用以下代码:

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

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

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

提供以下输出:

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

第二行的输出不应该与第一行的输出相同吗?

根据我的理解,通过引用分配变量,您需要使用$a = &$b,因此我使用的($a = $b)应该是值。因此,调用$end的函数也不应该修改$input,对吗?我错过了什么?

1 个答案:

答案 0 :(得分:3)

问题是DateTime是对象,对象总是通过引用分配。如果您想按"值"进行分配,则必须使用$end = clone $input;之类的克隆。

以下是PHP手册中有关它的信息:http://php.net/manual/en/language.oop5.references.php