成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

PHP|關(guān)于對(duì)象復(fù)制的一些事

svtter / 1370人閱讀

摘要:先看對(duì)象復(fù)制的代碼在及以后的版本,指向同一個(gè)對(duì)象。在中,對(duì)象的賦值和傳遞都是通過(guò)引用進(jìn)行的。當(dāng)我們需要一個(gè)對(duì)象的副本時(shí),可以這么做通過(guò)關(guān)鍵字,使用值復(fù)制方式新生成一個(gè)對(duì)象。但是這有一個(gè)問(wèn)題,對(duì)象中的某些數(shù)據(jù),比如,我不想是一樣的。

先看對(duì)象復(fù)制的代碼

class CopyMe{}
$first = new CopyMe();
$second = $first;

在PHP5及以后的版本,$first & $second指向同一個(gè)對(duì)象。

在PHP中,對(duì)象的賦值和傳遞都是通過(guò)引用進(jìn)行的。

當(dāng)我們需要一個(gè)對(duì)象的副本時(shí),可以這么做:

class CopyMe{}
$first = new CopyMe();
$second = clone $first;

通過(guò)clone關(guān)鍵字,使用值復(fù)制方式新生成一個(gè)對(duì)象。

但是這有一個(gè)問(wèn)題,對(duì)象中的某些數(shù)據(jù),比如id,我不想是一樣的。但是clone是做不到的。

這時(shí)我們可以通過(guò)實(shí)現(xiàn)一個(gè)特殊的方法__clone()來(lái)達(dá)到這個(gè)目的。當(dāng)一個(gè)對(duì)象調(diào)用clone關(guān)鍵字時(shí),其__clone()方法就會(huì)被自動(dòng)調(diào)用。

class Person
{
    public private $id;
    
    public function __construct() {}
    
    public function setId($id) {
        $this->id = $id;
    }

    public function __clone() {
        $this->id = 0;
    }
}

$person = new Person();
$person->setId(343);
$person2 = clone $person;

這樣的賦值屬于淺復(fù)制(shallow copy),可以保證所有基本數(shù)據(jù)類型的屬性被完全復(fù)制。

如果我們不希望對(duì)象的屬性的屬性被共享,例如:

class Account
{
    public $balance;
    public function __construct($balance) {
        $this->balance = $balance;
    }
}

class Person
{
    private $name;
    private $age;
    private $id;
    public $account;
    
    public function __construct($name, $age, Account $account) {
        $this->name = $name;
        $this->age = $age;
        $this->account = $account;
    }
    
    public function setId($id) {
        $this->id = $id;
    }
    
    public function __clone() {
        $this->id = 0;
    }
}

$person = new Person("bob", 43, new Account(200));
$person->setId(433);
$person2 = clone $person;

$person->account->balance += 10;
print $person2->account->balance;

得到的結(jié)果: 210

實(shí)際上我并不想讓$person2的賬戶價(jià)格受到另一個(gè)對(duì)象的影響。

可以顯式的在__clone方法中復(fù)制指向的對(duì)象。

function __clone() {
    $this->id = 0;
    $this->account = clone $this->account;
}

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/21653.html

相關(guān)文章

  • 【面試】Java基礎(chǔ)中那些-One

    摘要:前言面試中對(duì)于技術(shù)職位,一般分筆試與面談,如果面試官的一些小問(wèn)題你可以立馬找到對(duì)應(yīng)的知識(shí)點(diǎn)擴(kuò)展開來(lái),那么這就是你的優(yōu)勢(shì),本系列將講述一些面試中的事,不會(huì)很詳細(xì),但是應(yīng)該比較全面吧。 前言 面試中對(duì)于技術(shù)職位,一般分筆試與面談,如果面試官的一些小問(wèn)題你可以立馬找到對(duì)應(yīng)的知識(shí)點(diǎn)擴(kuò)展開來(lái),那么這就是你的優(yōu)勢(shì),本系列將講述一些java面試中的事,不會(huì)很詳細(xì),但是應(yīng)該比較全面吧。 主要內(nèi)容 說(shuō)到...

    Stardustsky 評(píng)論0 收藏0
  • PHP 引用是個(gè)坑,請(qǐng)慎用

    摘要:發(fā)布時(shí)最大的變動(dòng)是對(duì)象處理方式。這很容易被誤解為引用,但是存儲(chǔ)器的引用與引用是完全不同的概念。使用引用是一件不好的事情,除了引用本身不好,并且還會(huì)使性能下降這個(gè)事實(shí)外,使用引用這種方式會(huì)使得代碼難以維護(hù)。 showImg(https://segmentfault.com/img/remote/1460000014082570); 去年我參加了很多次會(huì)議,其中八次會(huì)議里我進(jìn)行了相關(guān)發(fā)言,...

    dockerclub 評(píng)論0 收藏0
  • SegmentFault 技術(shù)周刊 Vol.32 - 七夕將至,你對(duì)象”還好嗎?

    摘要:很多情況下,通常一個(gè)人類,即創(chuàng)建了一個(gè)具體的對(duì)象。對(duì)象就是數(shù)據(jù),對(duì)象本身不包含方法。類是相似對(duì)象的描述,稱為類的定義,是該類對(duì)象的藍(lán)圖或原型。在中,對(duì)象通過(guò)對(duì)類的實(shí)體化形成的對(duì)象。一類的對(duì)象抽取出來(lái)。注意中,對(duì)象一定是通過(guò)類的實(shí)例化來(lái)的。 showImg(https://segmentfault.com/img/bVTJ3H?w=900&h=385); 馬上就要到七夕了,離年底老媽老爸...

    李昌杰 評(píng)論0 收藏0
  • SegmentFault 技術(shù)周刊 Vol.32 - 七夕將至,你對(duì)象”還好嗎?

    摘要:很多情況下,通常一個(gè)人類,即創(chuàng)建了一個(gè)具體的對(duì)象。對(duì)象就是數(shù)據(jù),對(duì)象本身不包含方法。類是相似對(duì)象的描述,稱為類的定義,是該類對(duì)象的藍(lán)圖或原型。在中,對(duì)象通過(guò)對(duì)類的實(shí)體化形成的對(duì)象。一類的對(duì)象抽取出來(lái)。注意中,對(duì)象一定是通過(guò)類的實(shí)例化來(lái)的。 showImg(https://segmentfault.com/img/bVTJ3H?w=900&h=385); 馬上就要到七夕了,離年底老媽老爸...

    Lyux 評(píng)論0 收藏0
  • SegmentFault 技術(shù)周刊 Vol.32 - 七夕將至,你對(duì)象”還好嗎?

    摘要:很多情況下,通常一個(gè)人類,即創(chuàng)建了一個(gè)具體的對(duì)象。對(duì)象就是數(shù)據(jù),對(duì)象本身不包含方法。類是相似對(duì)象的描述,稱為類的定義,是該類對(duì)象的藍(lán)圖或原型。在中,對(duì)象通過(guò)對(duì)類的實(shí)體化形成的對(duì)象。一類的對(duì)象抽取出來(lái)。注意中,對(duì)象一定是通過(guò)類的實(shí)例化來(lái)的。 showImg(https://segmentfault.com/img/bVTJ3H?w=900&h=385); 馬上就要到七夕了,離年底老媽老爸...

    AaronYuan 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<