
__clone()是在clone對象時(shí)自動調(diào)用的方法。以上程序執(zhí)行結(jié)果如下:

如圖$p1和$p2是一樣的,注意開頭的那個Person#1;
而用clone語句,則把引用和所指向的內(nèi)容全復(fù)制了。由于在clone時(shí),自動調(diào)用__clone()語句,所以類的名稱name變成了xiaoming。
clone是淺復(fù)制:
利用clone方法,如果在一個類中,引用了其他對象,則克隆后,所有的引用仍然指向到原來的對象。即:對象克隆前克隆后,引用的對象沒有克隆。這樣的情況便是淺復(fù)制。相應(yīng)的自然是深復(fù)制了。。
或者可以這樣說:因?yàn)閏lone是淺復(fù)制,所以可以用__clone()方法復(fù)制對象所引用的對象。這樣clone方法也可以達(dá)到深復(fù)制的功能。
- 在代碼中常用到的是:
代碼中的sql語句或者框架中的sql寫法,寫一半時(shí),可以clone一下,后面跟著的其它不同語句,在不同場景下可以加不同的。
好像思路有點(diǎn)亂,偷張圖:

上圖相當(dāng)于復(fù)制query,筆者以前剛接觸tp5的query時(shí),還不知道clone,曾試圖用同一個query加不同的條件,最后郁郁而……只有放棄了這種寫法。所以第一次看到上圖中的寫法時(shí),有點(diǎn)小激動。
這篇文章可以看一下:php clone的使用場景