1
在PHP中,我假設每個對象都是引用,但是在這個代碼中;對象不作爲參考
/**
* adds a master object which affects browse and insert operations
*
* @param \bk\dataset\master|string $cursor
* @param Array $fields
*/
function SetMasterCursor ($cursor, $fields)
{
if (is_object($cursor)) {
$this->master = & $cursor; /** !!!!!! **/
} elseif (is_string($cursor)) {
$this->master = \bk\dataset\master::instance($cursor, null, $this->GetModuleName());
}
$this->_masterfld = $fields;
}
我需要強制PHP與&
運營商($this->master = & $cursor
)使用參考。如果我不使用操作員,則表現奇怪。它正在調用遊標類的構造函數。所以顯然它不僅僅是複製參考。我以爲,從$object1 = $object2
和$object1 = & $object2
上的PHP5是相同的,它只是不同的其他類型(字符串等)。我有一種感覺,我的假設是錯誤的。
您示例中的行爲正是我的預期。在我的例子中的問題是$ b = $ a(賦值)導致構造函數調用。 '$ this-> master = $ cursor'調用$ cursor類的構造函數。而'$ this-> master =&$ cursor'不會。 – bkilinc
調用構造函數確實很奇怪,你能提供一個最小的工作例子,我可以自己測試它嗎?我的回答指出,即使對於對象,賦值也不同於引用,因爲它正在複製指針而不是創建「別名」。 –
我接受這是正確的答案,因爲它只是PHP的行爲。我在調試過程中兩次調用構造函數。但我無法複製它。可能是其他一些代碼造成了這種情況。當我可以複製時,我會回到這裏。無論如何,這個答案清除了有關引用,克隆等的事情。謝謝。 – bkilinc