我正在構建一個小框架,並試圖在我的一些對象中實現clone()方法。此方法的目標是創建給定記錄的新副本,使用戶更容易在另一個記錄中創建新記錄。PHP中clone()方法的預期回報是多少?
在我看來,使用clone()和__clone()PHP方法是一個完美的場景。但是,究竟應該通過調用clone()返回什麼?當我創建一個克隆時,類似克隆對象的semms與原始的一樣,即使我已經改變了__clone魔術方法中的一些屬性。
下面是我現在做的unitl: 我的應用程序使用了ascincronous通信,所以有一個服務類,由API調用;這個Service類創建了我的Record類的新實例,並創建了一個克隆。在這個Record類中,有一個__clone magic方法的實現,用於對數據進行一些更改並保存新記錄。
的cloneRecord方法中服務類:
public function cloneRecord($original_id) {
$originalObject = new Record($original_id);
$originalObject->load(); //access the database and retrieve the property values for this record
$cloned = clone $originalObject;
return $cloned->id; // here is the problem! See explanation below
}
記錄類裏面的__clone方法:
public function __clone() {
$cloned = new Record();
//id and code will be generated automatically in the save() method:
$cloned->id = NULL;
$cloned->code = NULL;
//these other properties will be cloned:
$cloned->name = $this->name;
$cloned->startDate = $this->startDate;
$cloned->dueDate = $this->dueDate;
$cloned->save();
}
直到此時,一切似乎都正常工作。新記錄保存到數據庫中,爲此新記錄生成新的ID和新的代碼。
我如何調用該方法:
$service = new Service();
$newRecordId = $service->cloneRecord(200);
這裏什麼奇怪的事情發生! 我期望從上面的行得到的是新記錄的ID(也許是201)。相反,我收到相同的原始編號(200)。
這是預期的行爲?
你不應該返回在'__clone'重寫的東西嗎? – jraede
@jraede是的,我試着用'return $ cloned',但行爲是一樣的。 –