ホームページ >バックエンド開発 >PHPチュートリアル >PHPマジックメソッド__cloneの詳細説明(コード例)
1. PHP のマジック メソッドの定義を理解する
2. __clone() マジック メソッドの使用シナリオを理解する
3. __clone() マジックメソッドの使い方をマスターする
PHP では、__ (アンダースコア 2 つ) で始まるすべてのクラスメソッドがマジックメソッドとして予約されています。 。したがって、上記のマジック メソッドを除き、クラス メソッドを定義する場合は、先頭に __ を付けないことをお勧めします。
オブジェクトのクローン作成時に特別な論理処理を実行したい場合は、このクラスで定義できます。マジック メソッド、このマジック メソッドは __clone です。その中に独自の特別なビジネス ロジックを記述します。
概要:
1. PHP では、__clone はクラス内で次の形式で定義されます: public function __clone(). ここで、__clone である必要がある 2 つの __ が必要であり、パラメーターは 0 個 (1 つ多く、1 つ少ない) である必要があることに注意してください。どちらも機能しません
2. オブジェクトが複製されると、システムはオブジェクトが配置されているクラスの定義された __clone メソッドを自動的にトリガーします。
各概要は実践を通じて得られます。概要を示す練習をすることで、理解を促進し、各概要をより明確かつ直感的にすることができます。
練習目標:
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 オブジェクトを手動でコピーし、このクラスでこのマジック メソッドを定義するのと同じなので、魔法のようなもので、突然自動的に実行されます
<?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 は機能しません概要:
以上がPHPマジックメソッド__cloneの詳細説明(コード例)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。