ホームページ  >  記事  >  バックエンド開発  >  [phpのクラスとオブジェクト] オブジェクトのコピー

[phpのクラスとオブジェクト] オブジェクトのコピー

不言
不言オリジナル
2018-04-16 10:29:401437ブラウズ

この記事の内容は、[php クラスとオブジェクト] のオブジェクトのコピーに関するものです。これは、必要な友達と共有します

使用状況:

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

2. オブジェクト A がオブジェクト B への参照を保持しており、オブジェクト A をコピーすると、使用するオブジェクトがオブジェクト B ではなく B のコピーになる場合、オブジェクト A のコピーを取得する必要があります。

実装:

clone キーワード (可能であればオブジェクトの __clone() メソッドを呼び出します) を介して、オブジェクトの __clone() メソッドを直接呼び出すことはできません。

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

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

Example #1 复制一个对象<?phpclass 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);/*
Original Object:
MyCloneable Object
(
    [object1] => SubObject Object
        (
            [instance] => 1
        )

    [object2] => SubObject Object
        (
            [instance] => 2
        )

)
*/print("Cloned Object:\n");
print_r($obj2);/*
Cloned Object:
MyCloneable Object
(
    [object1] => SubObject Object
        (
            [instance] => 3
        )

    [object2] => SubObject Object
        (
            [instance] => 2
        )

)
*/?>

関連する推奨事項:

[php クラスとオブジェクト] マジック メソッド

[php クラスとオブジェクト] トラバーサル

[php クラスとオブジェクト] オーバーロード

以上が[phpのクラスとオブジェクト] オブジェクトのコピーの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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