ホームページ >バックエンド開発 >PHPの問題 >PHPのcloneメソッドは何をするのでしょうか?

PHPのcloneメソッドは何をするのでしょうか?

藏色散人
藏色散人オリジナル
2020-09-02 10:38:333290ブラウズ

php における clone メソッドの役割: オブジェクトのコピーに使用されます。オブジェクトのコピーは、[$copy_of_object = clone $object;] などの clone キーワードによって完了します。オブジェクト内の __clone() メソッドを直接呼び出すことはできません。

PHPのcloneメソッドは何をするのでしょうか?

#php clone メソッドはオブジェクトのコピーに使用されます。

推奨: "

php ビデオ チュートリアル"

ほとんどの場合、プロパティを取得するためにオブジェクトを完全にコピーする必要はありません。ただし、これが本当に必要となるケースが 1 つあります。それは、ウィンドウ関連のリソースを保持する GTK ウィンドウ オブジェクトがある場合です。元のウィンドウと同じプロパティをすべて保持したまま新しいウィンドウをコピーしたい場合がありますが、それは新しいオブジェクトである必要があります (新しいオブジェクトでない場合、一方のウィンドウでの変更がもう一方のウィンドウに影響するため)。

別の状況もあります。オブジェクト A がオブジェクト B への参照を保存している場合、オブジェクト A をコピーするときに、そこで使用されるオブジェクトをオブジェクト B ではなく B のコピーにしたい場合は、次のようにする必要があります。オブジェクト A のコピーを取得します。

オブジェクトのコピーは、clone キーワードを使用して実行できます (これにより、可能であればオブジェクトの __clone() メソッドが呼び出されます)。オブジェクト内の __clone() メソッドを直接呼び出すことはできません。

$copy_of_object = clone $object;

オブジェクトがコピーされると、PHP 5 はオブジェクトのすべてのプロパティの浅いコピーを実行します。すべての参照プロパティは、引き続き元の変数への参照になります。

__clone ( void ) : void

コピーが完了すると、__clone() メソッドが定義されている場合、新しく作成されたオブジェクト (コピーによって生成されたオブジェクト) の __clone() メソッドが呼び出され、これを使用して値を変更できます。属性 (必要な場合)。

例 #1 オブジェクトをコピーする

<?php
class SubObject
{
    static $instances = 0;
    public $instance;
    public function __construct() {
        $this->instance = ++self::$instances;
    }
    public function __clone() {
        $this->instance = ++self::$instances;
    }
}
class MyCloneable
{
    public $object1;
    public $object2;
    function __clone()
    {
      
        // 强制复制一份this->object, 否则仍然指向同一个对象
        $this->object1 = clone $this->object1;
    }
}
$obj = new MyCloneable();
$obj->object1 = new SubObject();
$obj->object2 = new SubObject();
$obj2 = clone $obj;
print("Original Object:\n");
print_r($obj);
print("Cloned Object:\n");
print_r($obj2);
?>

上記のルーチンは出力します:

Original Object:
MyCloneable Object
(
    [object1] => SubObject Object
        (
            [instance] => 1
        )
    [object2] => SubObject Object
        (
            [instance] => 2
        )
)
Cloned Object:
MyCloneable Object
(
    [object1] => SubObject Object
        (
            [instance] => 3
        )
    [object2] => SubObject Object
        (
            [instance] => 2
        )
)

以上がPHPのcloneメソッドは何をするのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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