Either the copy is a reference to the object or the variable inside
the object is a static variable, I'm not sure what is going on, but It
doesn't seem like it should be doing that. Is that because of a
setting on the server or something ?
<?
$label=new myObj();
$label->settext('the text');
$copy=$label;
print_r($copy);
$label->settext('different text');
print_r($copy);
class myObj{
var $text;
function settext($text){
$this->text=$text;
}
}
?>
results:
myObj Object
(
[text] => the text
)
myObj Object
(
[text] => different text
)
All objects in PHP 5, if I'm not mistaken, are always passed by
reference. Example:
<?php
class MyClass
{
public $myVar;
function __construct()
{
$this->myVar = 1;
}
}
$class1 = new MyClass();
$class2 = $class1;
$class1->myVar = 2;
echo $class2->myVar; // Outputs 2
?>
If you want to make a copy of an object, so its a new object and not a
reference is to use the clone keyword like this:
<?
class MyClass
{
public $myVar;
function __construct()
{
$this->myVar = 1;
}
}
$class1 = new MyClass();
$class2 = clone $class1;
$class1->myVar = 2;
echo $class2->myVar;
?>
You can also explicitly code what is to happen when an object is
cloned by using the __clone() class function. You can read more here:
http://us3.php.net/manual/en/language.oop5.cloning.php
Carmony
bummer. What I have done is create objects with numerous properties
and a function to set 1 property and then return itself.
$label=new geocellobj();
$label->setalign('right');
$label->setvalign('middle');
$label->setstyle('border:0;');
array($label->settext('unique test'), $label->settext('different
text));
I don't think cloning will help me.
>> You can also explicitly code what is to happen when an object is
>> cloned by using the __clone() class function.
> $label=new geocellobj();
> $label->setalign('right');
> array($label->settext('unique test'), $label->settext('different
> text));
> I don't think cloning will help me.
Well, just clone the objects before storing them into the array:
array(clone $label->settext(...), ...)
Ok thanks that works great.