ホームページ バックエンド開発 PHPチュートリアル PHPでのオブジェクトのコピーとクローン作成

PHPでのオブジェクトのコピーとクローン作成

Jun 28, 2018 pm 03:35 PM

# オブジェクトのコピーと複製

# * 1. デフォルトでは、オブジェクトは参照によって渡されます (実際にはオブジェクト識別子のコピー。これについては後ほど詳しく説明します)

# * 2. つまり、2 つのオブジェクト変数は実際には同じオブジェクトを参照します

#* * 3. 新しいオブジェクトを作成する場合は、clone キーワードを使用して現在のオブジェクトのクローンを作成する必要があります

* 4 . clone キーワードを使用する場合、クラス内に __clone() があれば、自動的に呼び出されます

# * 5. __clone() メソッドは、新しく作成されたオブジェクト上で実行されます

* 6.__clone() メソッドは、コピーする内容とクローン作成時に完了する基本操作を制御できます。

class Member
{
    //声明三个私有属性
    private $name;  //会员名
    private $email; //会员邮箱
    private $score; //会员积分
    
    //构造方法
    public function __construct($name='',$email='',$score=0)
    {
        $this->name = $name;
        $this->email = $email;
        $this->score = $score;
    }
    
    //查询器(暂时省略访问控制)
    public function __get($name)
    {
        return $this->$name;
    }
    
    //设置器(暂时省略访问控制)
    public function __set($name,$value)
    {
        $this->$name = $value;
    }
    
    //克隆魔术方法在对象克隆时自动调用,针对新对象进行初始化操作
    public function __clone()
    {
        $this->score = 0;
    }
    
}
ログイン後にコピー

//メンバー クラス Member をインスタンス化し、メンバー オブジェクト $member

$member = new Member('peter','peter@php.cn',1000);
ログイン後にコピー

を作成します。 //アクセステスト

echo $member->score;
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

//メンバーオブジェクトをコピーします

$member1 = $member;
ログイン後にコピー

//新しい変数名$member1を使用してオブジェクト情報を更新します

$member1->score = 2000;
ログイン後にコピー

//新しい変数名を使用しますオブジェクト変数名 $member1 にアクセス

echo $member1->score;
echo &#39;<hr>&#39;;
ログイン後にコピー

//元のオブジェクト名 $member を使用して

echo $member->score;
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

にアクセス * 結論:

* 1. 新しい変数の結果変更は元のオブジェクト変数

* 2 に反映されます。これら 2 つの変数が実際に同じオブジェクトを指していることを説明します

* 3。つまり、オブジェクトはデフォルトで参照によって渡されます

* 4. つまり、2番目の変数名 $member1 は、元の変数のエイリアスに過ぎず、新しいオブジェクトは作成されません。

# * 5. 単にであることが理解できます。元のオブジェクトの識別子の新しい名前

var_dump($member1);  //对象id=1
var_dump($member);   //对象id=1
ログイン後にコピー

//説明$ member1 と $member は名前が異なるだけで、2 つの同一のオブジェクトです

//次の場合はどうすればよいですか新しいオブジェクトを完全に作成するには、次のキーワードを使用する必要があります: clone

$member2 = clone $member;
ログイン後にコピー

//まずオブジェクト変数のスコア属性値を確認しましょう $member2

echo $member2->score; //目前是原始值2000
ログイン後にコピー

//スコア値を変更します

$member2->score = 5000;
echo &#39;<hr>&#39;;
ログイン後にコピー

//$member2 のスコアをもう一度確認してください

echo $member2->score; //新值5000
echo &#39;<hr>&#39;;
ログイン後にコピー

//よく考えてください、私の変更は元の $member 変数のスコア属性値に影響を与えるでしょうか?

echo $member->score; //发现原对象的score属性值仍为2000,未发生变化
ログイン後にコピー

//これはなぜですか? クローン技術を使用して 2 つのまったく異なるオブジェクト変数を作成したためです。

//以下の検証

var_dump($member); //变量id是1
var_dump($member2); //变量id是2
ログイン後にコピー

//これら 2 つのオブジェクト変数の ID が異なることを示しています。これらは 2 つの完全に異なるオブジェクトです

//次のタスクを実行します: 新しいメンバー オブジェクトを作成するとき、メンバーのポイントをゼロにクリアします。

#//作成する必要がありますか? Member クラス Magic メソッドの __clone() クローン。クローンされた新しいオブジェクトを前処理します。

//もう一度デモンストレーションします

//現在のポイントを表示します

echo $member->score;
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

//Clone新しいオブジェクトを作成します $member3

$member3 = clone $member;
ログイン後にコピー

//新しいオブジェクト $member3 のスコア値をチェックして、クラス内の __clone() が有効かどうかを確認します?

echo &#39;<hr>&#39;;
echo $member3->score; //0,说明克隆魔术方法已经生效
ログイン後にコピー

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

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

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

PHPのオブジェクト操作と配列操作はどちらが速いでしょうか? PHPのオブジェクト操作と配列操作はどちらが速いでしょうか? Jul 12, 2023 pm 03:04 PM

PHP 配列操作は PHP オブジェクト操作よりも高速です。その理由は次のとおりです: 1. オブジェクト操作には、オブジェクトの作成、メソッドの呼び出し、プロパティへのアクセスなどの手順が含まれるため、パフォーマンスが遅くなる可能性があります。2. 配列操作は特殊なタイプの変数です。複数の値を保持し、配列に対してさまざまなメソッドや関数を使用し、配列に対して高速かつ効率的な操作を実行できます。

ループ内でPHP配列をオブジェクトに変換する方法 ループ内でPHP配列をオブジェクトに変換する方法 Aug 10, 2023 pm 02:44 PM

ループ内で PHP 配列をオブジェクトに変換するには 2 つの方法があります: 1. 強制型変換を使用して配列をオブジェクトに変換します。配列のキーは有効なオブジェクト属性名である必要があります。2. 新しいオブジェクトを作成し、配列キーがオブジェクトのプロパティ名として有効かどうかに関係なく、オブジェクトにコピーされた配列の要素を追加します。

PHPオブジェクトと配列の違いは何ですか PHPオブジェクトと配列の違いは何ですか Aug 24, 2023 pm 05:02 PM

PHP オブジェクトと配列の違いは次のとおりです: 1. オブジェクトは複合データ型であるのに対し、配列は単純なデータ型です; 2. オブジェクトのプロパティとメソッドにはオブジェクトのインスタンスを通じてアクセスできますが、要素はインデックスを介して配列にアクセスできます; 3. オブジェクトはプロパティとメソッドをカプセル化するエンティティですが、配列は順序付けられた要素のコレクションです; 4. PHP ではオブジェクトは参照によって渡されますが、配列は PHP では値によって渡されますPHP; 5. オブジェクトは状態や動作を持つエンティティを記述するのに適しており、配列は大量の同様のデータを保存および処理するのに適しています。

PHPでオブジェクト変数を使用する方法 PHPでオブジェクト変数を使用する方法 Sep 13, 2023 pm 12:59 PM

PHP でオブジェクト変数を使用するには、特定のコード例が必要です。PHP では、オブジェクト変数を使用すると、オブジェクトの管理と操作が容易になります。オブジェクト変数は、オブジェクト インスタンスを格納するデータ型であり、クラスのメソッドを呼び出したり、クラスのプロパティにアクセスしたりすることでオブジェクトを操作できます。以下では、PHP でオブジェクト変数を使用する方法と、対応するコード例を詳しく紹介します。オブジェクトの作成 PHP では、new キーワードを使用してオブジェクトを作成できます。例は次のとおりです: classCar{public$colo

PHPの配列はオブジェクトですか? PHPの配列はオブジェクトですか? Jul 22, 2022 pm 05:24 PM

PHP 配列はオブジェクトではありません。 PHP では、配列とオブジェクトは 2 つの異なるデータ型です。配列は順序付けられたデータのコレクションであり、オブジェクトは、プロパティだけでなくメソッドも含むクラスのインスタンス化の結果です。オブジェクトはデータに対する操作をカプセル化できますが、配列はカプセル化できません。

PHP でオブジェクト メソッドを呼び出す方法を調べる PHP でオブジェクト メソッドを呼び出す方法を調べる Mar 28, 2023 pm 03:00 PM

PHP は、さまざまなアプリケーション、特に Web アプリケーションの開発に使用できる非常に人気のあるプログラミング言語です。 PHP では、オブジェクト指向プログラミングが重要な機能の 1 つです。この記事では、PHP でオブジェクト メソッドを呼び出す方法について説明します。

PHPでオブジェクト内のすべてのメソッドを取得する方法 PHPでオブジェクト内のすべてのメソッドを取得する方法 Mar 23, 2023 am 11:12 AM

PHP では、オブジェクト内のすべてのメソッドを取得するのが非常に簡単です。これは、PHP 標準ライブラリの ReflectionClass クラスを使用することで実現できます。 ReflectionClass クラスは、クラス名、属性、メソッドなどを含む、PHP のクラスのすべての情報を反映するメソッドを提供します。以下では、ReflectionClass クラスを使用してオブジェクト内のすべてのメソッドを取得する方法を詳しく紹介します。

PHP オブジェクトとクラスの関数インスタンス PHP オブジェクトとクラスの関数インスタンス Jun 16, 2023 am 09:51 AM

PHP は、オブジェクトとクラスの概念をサポートするオブジェクト指向プログラミング言語です。 PHP では、オブジェクトはクラスのインスタンスであり、データと関数 (メソッドと呼ばれます) を格納できます。 PHP オブジェクトとクラスの関数を使用することで、コードを簡単に整理し、コードの再利用性を向上させることができます。この記事では、PHPのオブジェクトやクラス上の関数の例とその機能を紹介します。コンストラクター (__construct) コンストラクターは、オブジェクトの作成時に自動的に呼び出される関数です。オブジェクトのプロパティを初期化し、実行するために使用されます。

See all articles