首先,我了解编程和对象,但下面的内容对我在PHP中没有多大意义。
在PHP中,我们使用&运算符来检索对变量的引用。我把引用理解为用不同的变量来引用相同的“事物”。如果我举个例子
$b = 1;
$a =& $b;
$a = 3;
echo $b;
将输出3,因为对$a所做的更改与对$b所做的更改相同。相反:
$b = 1;
$a = $b;
$a = 3;
echo $b;
应输出% 1。
如果是这样,为什么需要clone关键字呢?在我看来,如果我设置
$obj_a = $obj_b
则对$obj_a所做的更改不应影响$obj_b,相反,$obj_a =& $obj_b应指向同一对象,因此对$obj_a所做的更改将影响$obj_b。
然而,在PHP中,似乎$obj_a上的某些操作确实会影响$obj_b,即使没有指定引用运算符($obj_a = $obj_b)
。这导致了我今天在使用DateTime对象时遇到了一个令人沮丧的问题,我最终通过以下基本操作修复了这些问题:
$obj_a = clone $obj_b
但是,我编写的大部分php代码似乎不需要像本例中那样显式克隆,没有它也能正常工作。这里发生了什么事?为什么PHP一定要这么笨拙??
发布于 2014-11-13 01:39:30
我写了一个演示文稿来更好地解释php是如何使用它的变量来管理内存的:
看一看;)
https://stackoverflow.com/questions/3611986
复制相似问题