copy of object is a reference in PHP5

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • groups2@reenie.org

    copy of object is a reference in PHP5

    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('diffe rent 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
    )

  • JustinCarmony

    #2
    Re: copy of object is a reference in PHP5

    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('diffe rent 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:


    Carmony

    Comment

    • Thomas Hamacher

      #3
      Re: copy of object is a reference in PHP5

      groups2@reenie. org schrieb:
      On Oct 25, 2:05 pm, JustinCarmony <carm...@gmail. comwrote:
      >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('righ t');
      array($label->settext('uniqu e test'), $label->settext('diffe rent
      text));
      I don't think cloning will help me.
      Well, just clone the objects before storing them into the array:

      array(clone $label->settext(...) , ...)

      Comment

      • groups2@reenie.org

        #4
        Re: copy of object is a reference in PHP5

        On Oct 25, 6:17 pm, Thomas Hamacher <da...@nurfuers pam.dewrote:
        grou...@reenie. org schrieb:
        >
        On Oct 25, 2:05 pm, JustinCarmony <carm...@gmail. comwrote:
        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('righ t');
        array($label->settext('uniqu e test'), $label->settext('diffe rent
        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.

        Comment

        Working...