It appears that cloning is broken, since a modification to the clone
modifies the original. For my __clone method implementation, I allow
all of the variables to be set by default except for one. But this
problem persists even when I don't modify that one variable.
I forgot to mention: I am use b4
It appears that cloning is broken, since a modification to the clone
modifies the original. For my __clone method implementation, I allow
all of the variables to be set by default except for one. But this
problem persists even when I don't modify that one variable.
Hello,
most probably that property is a reference in which case the result is
correct.
Sunday, February 15, 2004, 11:45:56 PM, you wrote:
It appears that cloning is broken, since a modification to the clone
modifies the original. For my __clone method implementation, I allow
all of the variables to be set by default except for one. But this
problem persists even when I don't modify that one variable.
--
Best regards,
Marcus mailto:helly@php.net
It appears that only one of the variables, an array, is being shared
across these multiple objects, but other array variables are not.
Moreover, When I make a clone and then set the clone to null, all
clones made thereafter are correct.
$clone = clone $object;
$clone = null;
Also, I can't replicate the problem with another class. It only seems
to be this class.
Hello,
most probably that property is a reference in which case the result is
correct.Sunday, February 15, 2004, 11:45:56 PM, you wrote:
It appears that cloning is broken, since a modification to the clone
modifies the original. For my __clone method implementation, I allow
all of the variables to be set by default except for one. But this
problem persists even when I don't modify that one variable.--
Best regards,
Marcus mailto:helly@php.net
More specifically,
This causes a change in $object:
$clone = clone $object;
$clone->troublesomeVariable = array();
But this doesn't:
$clone = clone $cell;
$clone = null;
$clone->_subElements = array();
It appears that only one of the variables, an array, is being shared
across these multiple objects, but other array variables are not.
Moreover, When I make a clone and then set the clone to null, all
clones made thereafter are correct.$clone = clone $object;
$clone = null;Also, I can't replicate the problem with another class. It only seems
to be this class.Hello,
most probably that property is a reference in which case the result is
correct.Sunday, February 15, 2004, 11:45:56 PM, you wrote:
It appears that cloning is broken, since a modification to the clone
modifies the original. For my __clone method implementation, I allow
all of the variables to be set by default except for one. But this
problem persists even when I don't modify that one variable.--
Best regards,
Marcus mailto:helly@php.net
That should be clone $object for the example.
$clone = clone $cell;
Hello,
first as i said do the following to verify:
marcus@frodo /usr/src/php5 $ php -r '$a=array(1,2);class t{public $a;function f(){$this->a=&$GLOBALS["a"];}}$o1=new t;$o1->f();var_dump($o1);$o2=clone $o1;$o1->a=2;var_dump($o2);var_dump($o1);'
make: `sapi/cli/php' is up to date.
object(t)#1 (1) {
["a"]=>
&array(2) {
[0]=>
int(1)
[1]=>
int(2)
}
}
object(t)#2 (1) {
["a"]=>
&int(2)
}
object(t)#1 (1) {
["a"]=>
&int(2)
}
then remove the '&'.
second read the docs and question such things on general@php.net.
Monday, February 16, 2004, 1:39:44 AM, you wrote:
More specifically,
This causes a change in $object:
$clone = clone $object;
$clone->troublesomeVariable = array();
But this doesn't:
$clone = clone $cell;
$clone = null;
$clone->_subElements = array();
It appears that only one of the variables, an array, is being shared
across these multiple objects, but other array variables are not.
Moreover, When I make a clone and then set the clone to null, all
clones made thereafter are correct.$clone = clone $object;
$clone = null;Also, I can't replicate the problem with another class. It only seems
to be this class.Hello,
most probably that property is a reference in which case the result is
correct.Sunday, February 15, 2004, 11:45:56 PM, you wrote:
It appears that cloning is broken, since a modification to the clone
modifies the original. For my __clone method implementation, I allow
all of the variables to be set by default except for one. But this
problem persists even when I don't modify that one variable.--
Best regards,
Marcus mailto:helly@php.net--
--
Best regards,
Marcus mailto:helly@php.net
first as i said do the following to verify:
It's a nice example, but it doesn't apply. I don't make a reference.
second read the docs and question such things on general@php.net.
I did. This problem seemed to be internal, and it still does.
Hello,
Monday, February 16, 2004, 1:54:36 AM, you wrote:
first as i said do the following to verify:
It's a nice example, but it doesn't apply. I don't make a reference.
second read the docs and question such things on general@php.net.
I did. This problem seemed to be internal, and it still does.
Ok, so you are sure var_dump()
doesn't show the & for the property in
question? If so i would need to know where exactly the array comes from.
And the best way to proceed tehn is to create a bug report with a short
reproducing script.
--
Best regards,
Marcus mailto:helly@php.net
Here, I have reproduced the problem:
class A
{
var $a = array();
public function makeAReference()
{
$array = $this->getA();
}
public function &getA()
{
return $this->a;
}
}
$A = new A;
$A->a = array(1);
$A->makeAReference();
$clone = clone $A;
$clone->a = array();
print_r($A);
Try it with an without $A->makeAReference()
I sent in a report. Thanks.
Ok, so you are sure
var_dump()
doesn't show the & for the property in
question? If so i would need to know where exactly the array comes
from.
And the best way to proceed tehn is to create a bug report with a short
reproducing script.
This too:
class A
{
var $a = array();
public function &getA()
{
return $this->a;
}
}
$A = new A;
$A->a = array(1);
$array = &$A->getA();
$clone = clone $A;
$clone->a = array();
print_r($A);
Here, I have reproduced the problem:
class A
{
var $a = array();public function makeAReference() { $array = $this->getA(); } public function &getA() { return $this->a; }
}
$A = new A;
$A->a = array(1);
$A->makeAReference();
$clone = clone $A;
$clone->a = array();print_r($A);
Try it with an without $A->makeAReference()
I sent in a report. Thanks.
This was never resolved:
Is this, or is this not a bug:
class A
{
var $a;
}
$A = new A;
$A->a = array(1);
$array = &$A->a;
$clone = clone $A;
$clone->a = array(); //Affects a in $A.
print_r($A);