__clone()
是在clone
對象時自動調(diào)用的方法占哟。以上程序執(zhí)行結(jié)果如下:
如圖$p1
和$p2
是一樣的,注意開頭的那個Person#1
;
而用clone
語句梭灿,則把引用和所指向的內(nèi)容全復(fù)制了页响。由于在clone時闺魏,自動調(diào)用__clone()語句,所以類的名稱name變成了xiaoming鸭限。
clone是淺復(fù)制:
利用clone方法蜕径,如果在一個類中,引用了其他對象败京,則克隆后兜喻,所有的引用仍然指向到原來的對象。即:對象克隆前克隆后赡麦,引用的對象沒有克隆朴皆。這樣的情況便是淺復(fù)制。相應(yīng)的自然是深復(fù)制了泛粹。遂铡。
或者可以這樣說:因?yàn)閏lone是淺復(fù)制,所以可以用__clone()方法復(fù)制對象所引用的對象晶姊。這樣clone方法也可以達(dá)到深復(fù)制的功能扒接。
- 在代碼中常用到的是:
代碼中的sql語句或者框架中的sql寫法,寫一半時,可以clone一下们衙,后面跟著的其它不同語句钾怔,在不同場景下可以加不同的。
好像思路有點(diǎn)亂蒙挑,偷張圖:
上圖相當(dāng)于復(fù)制query蒂教,筆者以前剛接觸tp5的query時,還不知道clone脆荷,曾試圖用同一個query加不同的條件凝垛,最后郁郁而……只有放棄了這種寫法懊悯。所以第一次看到上圖中的寫法時,有點(diǎn)小激動梦皮。
這篇文章可以看一下:php clone的使用場景