On Oct 25, 11:50 am, grou...@reenie.org wrote:
Can someone please explain the results below
We switched to PHP 5
if I make a copy of an object, and then change the variable inside the
object the change is reflected in the copy.
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