ホームページ  >  記事  >  バックエンド開発  >  PHP での clone キーワードと __clone() メソッドの使用 (詳細な例)

PHP での clone キーワードと __clone() メソッドの使用 (詳細な例)

WBOY
WBOYオリジナル
2021-10-25 16:33:573125ブラウズ

前回の記事では、PHPにおけるネームスペースの定義と使い方について詳しく紹介した「PHPでのネームスペースの定義と使い方(詳細例)」をご紹介しましたが、この記事では引き続きPHPでのネームスペースの定義と使い方を紹介していきます。 clone キーワードの使用については、PHP の関連知識が必要です。みんなが助けてくれるといいですね!

PHP での clone キーワードと __clone() メソッドの使用 (詳細な例)

前回の調査では、$this$new などの多くのキーワードがありました。今日は続けます。キーワード clone を確認します。これも PHP でよく使用されます。 clone キーワードを学習する前に、PHP のオブジェクト モデルが参照によってオブジェクトを呼び出すことを知っておく必要がありますが、オブジェクトのコピーを作成する必要もあります。その目的は、元のオブジェクトが変更されたときにオブジェクトのコピーが影響を受けないようにすることです。

このとき、 new キーワードを使用すると、オブジェクトを再作成し、属性に同じ値を割り当てることができ、新しいコピーを作成する役割も果たします。しかし、この方法は面倒なだけでなく、エラーが発生しやすくなります。現時点では、PHP が同一のオブジェクトを持つことができ、2 つが互いに干渉しないことを望みます。これがクローンと考えられます。これはどのように達成されるべきでしょうか?パニックにならないで、見守ってください。

<strong><span style="font-size: 20px;">クローン</span></strong>キーワード

そこにあることを願っていますは、元のオブジェクトに干渉しないコピーです。PHP では、clone キーワードを使用してオブジェクトのクローンを作成できます。

cloneキーワードの構文形式は次のとおりです。

克隆对象名称 = clone 原对象名称;

クローン作成アクションは、オブジェクトのメモリ領域をコピーすることと理解できます。オブジェクトは元のオブジェクトと同じです オブジェクトは互いに独立しています。そして、それらの間のメンバーのメソッド、プロパティ、および値はまったく同じです。

次に、簡単な例で clone の機能を見てみましょう。例は次のとおりです:

<?php
    class father{
        public $study1, $study2;
        public function __construct($study1, $study2){
            $this -> study1 = $study1;
            $this -> study2 = $study2;
        }
        public function output(){
            echo $this -> study1.&#39;,&#39;. $this -> study2.&#39;<br>&#39;;
        }
    }
    $obj  = new father(&#39;好好学习&#39;, &#39;天天向上&#39;);
    $obj2 = clone $obj;//克隆$obj
    $obj  -> output();
    $obj2 -> output();
    echo &#39;<pre class="brush:php;toolbar:false">&#39;;
    var_dump($obj);
    var_dump($obj2);
?>

出力結果:

PHP での clone キーワードと __clone() メソッドの使用 (詳細な例)

注意する必要があるのは、= を使用してオブジェクトを変数に割り当てる場合、取得するものはオブジェクトへの参照になるということです。この変数を通じて属性の値を変更すると、元のオブジェクトに影響を与えます。したがって、やはりクローンを使用する必要があり、属性値を変更しても元のオブジェクトには影響しません。

上記の例を通じて、オブジェクトを複製して使用する方法はすでにわかりましたが、オブジェクトが正常に複製された後は、その属性、メンバー メソッド、および値は元のオブジェクトとまったく同じになります。このとき、属性を変更しても元のオブジェクトには影響しないとだけ言っていますが、クローンされたコピーメンバーの属性をどのように再割り当てすればよいでしょうか?このとき、PHP マジック メソッドの __clone() メソッドを使用します。

<strong><span style="font-size: 20px;">#clone()</span></strong>メソッド

#PHP __clone() メソッドを直接呼び出すことはできません。clone には __clone() しかありません。オブジェクトが clone キーワードによって複製された場合にのみ、__clone を実行できます。 () メソッドは、この複製されたオブジェクトを通じて呼び出されます。

このとき、clone を使用してコピーを作成する場合は、PHP が __clone() が存在するかどうかを確認することに注意する必要があります。

これが存在しない場合、PHP はデフォルトでオブジェクトのすべての属性を割り当てます。__clone() が存在する、つまり定義されている場合は、新しいオブジェクトの属性も割り当てられます。 。

例で見てみましょう 例は次のとおりです:

<?php
    class father{
        public $name, $url;
        public function __construct($name, $url){
            $this -> name = $name;
            $this -> url  = $url;
        }
        public function output(){
            echo $this -> name.&#39;,&#39;.$this -> url.&#39;<br>&#39;;
        }
        public function __clone(){//通过__clone()来更改新对象的属性
            $this -> name = &#39;福如东海&#39;;
            $this -> url  = &#39;寿比南山&#39;;
        }
    }
    $obj  = new father(&#39;好好学习&#39;, &#39;天天向上&#39;);
    $obj2 = clone $obj;
    $obj  -> output();
    $obj2 -> output();
?>

出力結果:

PHP での clone キーワードと __clone() メソッドの使用 (詳細な例)

上記の例から、__clone() メソッドにはパラメータが必要ないことがわかります。もう 1 つわかることは、クローン作成を無効にしたい場合は、アクセス権 private (プライベート) メソッドで空の __clone() をクラスに設定するだけでよいということです。クローン作成を禁止するという目的を達成できます。

ご興味がございましたら、「PHP ビデオ チュートリアル 」をクリックして、PHP の知識をさらにご覧ください。

以上がPHP での clone キーワードと __clone() メソッドの使用 (詳細な例)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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