ホームページ >バックエンド開発 >PHPチュートリアル >PHPマジックメソッド__cloneの詳細説明(コード例)

PHPマジックメソッド__cloneの詳細説明(コード例)

易达
易达オリジナル
2020-05-28 18:15:402142ブラウズ

この記事の目標:

1. PHP のマジック メソッドの定義を理解する

2. __clone() マジック メソッドの使用シナリオを理解する

3. __clone() マジックメソッドの使い方をマスターする

(1) PHP におけるマジックメソッドの定義を理解する

PHP では、__ (アンダースコア 2 つ) で始まるすべてのクラスメソッドがマジックメソッドとして予約されています。 。したがって、上記のマジック メソッドを除き、クラス メソッドを定義する場合は、先頭に __ を付けないことをお勧めします。

(2) __clone() マジック メソッドの使用シナリオを理解する

オブジェクトのクローン作成時に特別な論理処理を実行したい場合は、このクラスで定義できます。マジック メソッド、このマジック メソッドは __clone です。その中に独自の特別なビジネス ロジックを記述します。

(3) __clone() マジック メソッドの使い方をマスターします。

概要:

1. PHP では、__clone はクラス内で次の形式で定義されます: public function __clone(). ここで、__clone である必要がある 2 つの __ が必要であり、パラメーターは 0 個 (1 つ多く、1 つ少ない) である必要があることに注意してください。どちらも機能しません

2. オブジェクトが複製されると、システムはオブジェクトが配置されているクラスの定義された __clone メソッドを自動的にトリガーします。

各概要は実践を通じて得られます。概要を示す練習をすることで、理解を促進し、各概要をより明確かつ直感的にすることができます。

ケース 1,

練習目標:

1 。PHP では、__clone public function __clone() の形式でクラスに定義されています。ここでは 2 つの __ が必要で、これは __clone である必要があり、パラメーターは 0 個取らなければならないことに注意してください。1 つ多くても 1 つ少なくても機能しません。

具体的なコードは次のとおりです:

<?php
class Animal{
    public function eat(){

    }
    public function sleep(){

    }
    //魔术方法 
    public  function __clone(){
        echo "自动执行了Animal类中的__clone方法<br/>";
    }
}
$ani = new Animal();
?>

実行結果は次のとおりです:

空白

エラーが報告されないことを示します

次に、この __clone メソッドにパラメータを追加して、実行結果がどのようになるかを確認してみましょう。

<?php
class Animal{
    public function eat(){

    }
    public function sleep(){

    }
    //魔术方法 
    public  function __clone($name){
        echo "自动执行了Animal类中的__clone方法<br/>";
    }
}
$ani = new Animal();
?>

実行結果は次のとおりです:

致命的エラー: メソッド Animal::__clone () は、D:\E-class\class-code\classing\index.php の 11 行目で引数を受け入れることができません。

エラー メッセージから判断すると、このメソッドはパラメータを運ぶことができないため、これは重要です。覚えておいてください。

ケース 2、

実践的な目標:

1. オブジェクトのクローンを作成するとき、システムは、定義された_ _clone メソッド#を自動的にトリガーします。

##具体的なコードは次のとおりです:

<?php
class Animal{
    public function eat(){

    }
    public function sleep(){

    }
    //魔术方法 
    public  function __clone(){
        echo "自动执行了Animal类中的__clone方法<br/>";
    }
}
$ani = new Animal();
$ani2 = clone $ani;

?>

__clone メソッドを手動で呼び出していないことがわかりました。つまり、$ani->__clone() として記述されていないことがわかりました。しかし、このメソッドはまだ実行されています。なぜですか? $ani2 = clone $ani; と記述したので、これは $ani オブジェクトを手動でコピーし、このクラスでこのマジック メソッドを定義するのと同じなので、魔法のようなもので、突然自動的に実行されます


ここでは、アンダースコアが 1 つではなく 2 つあることに注意する必要があります。そうでない場合は、魔法のメソッドではありません。もう一度テストしてみましょう。

具体的なコードは次のとおりです:

<?php
class Animal{
    public function eat(){

    }
    public function sleep(){

    }
    //魔术方法 试着少一个_
    public  function _clone(){
        echo "自动执行了Animal类中的__clone方法<br/>";
    }
}
$ani = new Animal();
$ani2 = clone $ani;

?>

The実行結果は次のとおりです:

空白

これは、__clone メソッドが自動的に呼び出されなかったことを意味するため、__ にはアンダースコアが 2 つあることを忘れないでください。 less は機能しません

概要:


1. この記事では主に、php

の __clone マジック メソッドの具体的な使用シナリオと具体的な実装方法について学びます。この記事はあなたにもたらすことができます私を助けてください、ありがとう! ! !

以上がPHPマジックメソッド__cloneの詳細説明(コード例)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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