一千萬個為什麽

搜索

克隆行為 - 無法為克隆設置屬性值?

此代碼無法按預期運行:

// $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();

WMSInput 類:

abstract class WMSInput {
  private $inputName;

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

沒有PHP錯誤(錯誤報告設置為E_ALL)。

實際結果

email
email

預期結果

email
name

有任何想法嗎?

最佳答案

在我的測試網站上它工作正常。

您沒有在示例中復制方法getInputName。我開始在那裏搜索。也許你沒有返回所需的變量?

我的測試代碼是:

<?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();

輸出:

emailname

哪個是對的。

轉載註明原文: 克隆行為 - 無法為克隆設置屬性值?