首先,我理解编程和对象,但以下对我来说在PHP中没有多大意义.
在PHP中,我们使用&运算符来检索对变量的引用.我理解一个引用是一种用不同变量引用相同"事物"的方法.如果我说的话
$b = 1;
$a =& $b;
$a = 3;
echo $b;
Run Code Online (Sandbox Code Playgroud)
将输出3,因为对$ a的更改与对$ b的更改相同.反过来:
$b = 1;
$a = $b;
$a = 3;
echo $b;
Run Code Online (Sandbox Code Playgroud)
应该输出1.
如果是这种情况,为什么需要克隆关键字?在我看来,如果我设置
$obj_a = $obj_b 然后对$ obj_a所做的更改不应该影响$ obj_b,相反,$ obj_a =&$ obj_b应该指向同一个对象,因此对$ obj_a所做的更改会影响$ obj_b.
然而,在PHP中,似乎$ obj_a DO上的某些操作会影响$ obj_b,即使在没有引用运算符的情况下进行了分配($obj_a = $obj_b).这对我今天在使用DateTime对象时造成了令人沮丧的问题,我最终基本上通过这样做来修复:
$obj_a = clone $obj_b
Run Code Online (Sandbox Code Playgroud)
但是我编写的大多数PHP代码似乎都不需要像这种情况那样的显式克隆,没有它就可以正常工作.这里发生了什么?为什么PHP必须如此笨重?