ホームページ  >  記事  >  バックエンド開発  >  PHP クローンのディープ コピーとシャロー コピー ccllone hdclone memberwiseclon

PHP クローンのディープ コピーとシャロー コピー ccllone hdclone memberwiseclon

WBOY
WBOYオリジナル
2016-07-29 08:54:051365ブラウズ

今日、Dahuaのデザインパターンを見ていたら、プロトタイプのパターンを見ました。ディープコピーとシャローコピーについて書かれていたので、PHPのマニュアルを調べてみました。
PHP がディープ コピーとシャロー コピーをどのように実装するかをご覧ください。

<code><span><span>class</span><span>SubObject</span>
{</span><span>static</span><span>$instances</span> = <span>0</span>;
    <span>public</span><span>$instance</span>;

    <span>public</span><span><span>function</span><span>__construct</span><span>()</span>
    {</span><span>$this</span>->instance = ++ <span>self</span>::<span>$instances</span>;
    }

    <span>public</span><span><span>function</span><span>__clone</span><span>()</span>
    {</span><span>$this</span>->instance = ++<span>self</span>::<span>$instances</span>;
    }
}

<span><span>class</span><span>MyCloneable</span>
{</span><span>public</span><span>$object1</span>;
    <span>public</span><span>$object2</span>;

    <span>public</span><span><span>function</span><span>__clone</span><span>()</span>
    {</span><span>// 强制复制一份this->object, 否则仍然指向同一个对象</span><span>// 深复制[将自己的属性重新克隆一份]</span><span>$this</span>->object1 = <span>clone</span><span>$this</span>->object1;
        <span>// 浅复制[引用的还是原来,并没有生成新的]</span><span>//$this->object2 = clone $this->object2;</span>
    }

}

<span>$obj</span> = <span>new</span> MyCloneable();

<span>$obj</span>->object1 = <span>new</span> SubObject();
<span>$obj</span>->object2 = <span>new</span> SubObject();

<span>$obj2</span> = <span>clone</span><span>$obj</span>;

<span>print</span>(<span>"Original Object:\n"</span>);
print_r(<span>$obj</span>);

<span>print</span>(<span>"Clone Object:\n"</span>);
print_r(<span>$obj2</span>);</code>

結果

<code>Original Object:
MyCloneable Object
(
    [object1] => SubObject Object
        (
            [instance] => <span>1</span>
        )

    [object2] => SubObject Object
        (
            [instance] => <span>2</span>
        )

)
<span>Clone</span> Object:
MyCloneable Object
(
    [object1] => SubObject Object
        (
            [instance] => <span>3</span><span>//深复制 所以有+1</span>
        )

    [object2] => SubObject Object
        (
            [instance] => <span>2</span><span>//浅复制 并没有创建新的对象</span>
        )

)
</code>
').addClass('事前番号付け').hide(); $(this).addClass('has-numbering').parent().append($numbering); for (i = 1; i ').text(i)); }; $numbering.fadeIn(1700); }); });

上記では、クローンと PHP のコンテンツを含む、PHP クローンのディープ コピーとシャロー コピーを紹介しました。PHP チュートリアルに興味のある友人に役立つことを願っています。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。