浅いクローン作成: オブジェクト内の非オブジェクト、非リソースデータのみをクローンします。つまり、オブジェクト内の属性がオブジェクトタイプを保存します。その後、不完全なクローン作成が行われます
<code><span><span><?php </span><span><span>class</span><span>B</span>{</span><span>public</span><span>$val</span> = <span>10</span>; } <span><span>class</span><span>A</span>{</span><span>public</span><span>$val</span> = <span>20</span>; <span>public</span><span>$b</span>; <span>public</span><span><span>function</span><span>__construct</span><span>()</span>{</span><span>$this</span>->b = <span>new</span> B(); } } <span>$obj_a</span> = <span>new</span> A(); <span>$obj_b</span> = <span>clone</span><span>$obj_a</span>; <span>$obj_a</span>->val = <span>30</span>; <span>$obj_a</span>->b->val = <span>40</span>; var_dump(<span>$obj_a</span>); <span>echo</span><span>'<br>'</span>; var_dump(<span>$obj_b</span>);</span></span></code>
ディープクローン作成: すべてオブジェクトの属性データを完全にコピーするには、マジックメソッド __clone() を使用し、その中でディープクローン作成を実装する必要があります
<code><span><span><?php </span><span><span>class</span><span>B</span>{</span><span>public</span><span>$val</span> = <span>10</span>; } <span><span>class</span><span>A</span>{</span><span>public</span><span>$val</span> = <span>20</span>; <span>public</span><span>$b</span>; <span>public</span><span><span>function</span><span>__construct</span><span>()</span>{</span><span>$this</span>->b = <span>new</span> B(); } <span>public</span><span><span>function</span><span>__clone</span><span>()</span>{</span><span>$this</span>->b = <span>clone</span><span>$this</span>->b; } } <span>$obj_a</span> = <span>new</span> A(); <span>$obj_b</span> = <span>clone</span><span>$obj_a</span>; <span>$obj_a</span>->val = <span>30</span>; <span>$obj_a</span>->b->val = <span>40</span>; var_dump(<span>$obj_a</span>); <span>echo</span><span>'<br>'</span>; var_dump(<span>$obj_b</span>);</span></span></code>
上記は内容も含めて PHP クローンを紹介しましたが、PHP チュートリアルに興味のある友人に役立つことを願っています。