6

このコードでは

<?php
$object1        = new User();
$object1->name = "Alice";
$object2        = clone $object1;
$object2->name = "Amy";

echo "object1 name = " . $object1->name . "<br>";
echo "object2 name = " . $object2->name;

class User
{
    public $name;
}
?>

cloneただではなく使用する利点は何newですか? 新しく定義した を除いて、object1inの属性に対してすべて同じ値を取得するということですか?object2name

4

3 に答える 3

13

この特定の状況では、違いはありません。オブジェクトに他のプロパティがある場合は違いがあります (複製ではなく新しいインスタンスを作成すると、プロパティがリセットされます)。

clone適切な状況は他にもあります。

  • オブジェクトのクラスにアクセス可能なコンストラクターがない場合
  • オブジェクトのクラスにコンストラクターがあるが、それに渡す値がわからない場合。一般に、複製オブジェクトを作成する方法がわからない場合
  • 新しいオブジェクトの構築に望ましくない副作用がある場合
  • オブジェクトに内部状態があり、「新しく構築された」状態から既にあるインスタンスの状態に移行する方法がわからない場合
于 2013-03-29T23:21:55.643 に答える
2

cloneデフォルトにリセットするのではなく、すべてのプロパティ値をコピーします。たとえば、クエリ ビルダー クラスがあり、1 つまたは 2 つの小さな違いで 2 つのクエリをほぼ同一にしたい場合に便利です。出発点までの​​クエリを構築し、それを複製してから、一方を使用し、他方を別の方法で使用します。

于 2013-03-29T23:20:39.987 に答える
1

この場合、それはオブジェクトの非常に悪い言い訳であるため、何もありません。

ただし、各クラスがゲーム内のオブジェクトのタイプを表すゲームを作成しているとします。そのようなオブジェクトの 1 つは、跳ね返るボールである可能性があります。この場合、new Ball()は開始位置に新しいボールを作成し、最初のボールに続いてバウンドします。ただし、clone $ball1現在のボールを実際の位置に複製します。

于 2013-03-29T23:21:23.240 に答える