Search code examples
phpclone

Clone behaviour - cannot set attribute value for clone?


This code does not function as expected:

// $field contains the name of a subclass of WMSInput.
$fieldClone = clone $field;

echo $fieldClone->getInputName();

// Method on abstract WMSInput superclass.
$fieldClone->setInputName( 'name' );

echo $fieldClone->getInputName();

The WMSInput class:

abstract class WMSInput {
  private $inputName;

  public function setInputName( $inputName ) {
    $this->inputName = $inputName;
  }
}

There are no PHP errors (error reporting is set to E_ALL).

Actual Results

email
email

Expected Results

email
name

Any ideas?


Solution

  • On my test site it worked ok.

    You haven't copied method getInputName in your example. I'd start searching in there. Maybe you return not the desired variable?

    My test code was:

    <?php
    
    abstract class WMSInput {
      private $inputName;
    
      public function setInputName( $inputName ) {
        $this->inputName = $inputName;
      }
    
      public function getInputName() {
        return $this->inputName;
      }
    }
    
    class Test extends WMSInput {
    }
    
    $field = new Test();
    
    $field->setInputName('email');
    
    // $field contains the name of a subclass of WMSInput.
    $fieldClone = clone $field;
    
    echo $fieldClone->getInputName();
    
    // Method on abstract WMSInput superclass.
    $fieldClone->setInputName( 'name' );
    
    echo $fieldClone->getInputName();
    

    Output:

    emailname
    

    which is correct.