8

値オブジェクトの C# の例をたくさん読んだことがありますが、値によって識別されるのは「オブジェクト」であることを理解しています。値が変更された場合、オブジェクトは「新規」です。

しかし、それはPHPに関しては意味がないようです...それか、私が接続していないだけです。

値オブジェクトは単なる文字列ですか?

4

2 に答える 2

28

これを文脈に入れるために、多くの OO 言語では、オブジェクトはIDによって比較されます。擬似コード:

bar = new Foo
baz = new Foo

bar == baz  // false

両方のオブジェクトは、値だけを見ると基本的に同じですが、別々のインスタンスであるため、同一とは見なされません。デモンストレーションするには:

bar = new Foo
baz = bar

bar == baz  // true

今:

コンピューター サイエンスでは、値オブジェクトは、お金や日付範囲などの小さくて単純なオブジェクトであり、その等価性は ID に基づいていません。

http://en.wikipedia.org/wiki/Value_object

これは「値オブジェクト」のデモンストレーションになります。

address1 = new Address('Main street 42')
address2 = new Address('Main street 42')

address1 == address2  // true

値が同じであるため、両方のオブジェクトが別々のインスタンスであっても、等しいと見なされます。

PHP には「値オブジェクト」という別個の概念はなく、1 つのタイプのオブジェクトしかありません。ただし、その比較演算子はその区別を行うことができます。

比較演算子 (==) を使用すると、オブジェクト変数は単純な方法で比較されます。つまり、2 つのオブジェクト インスタンスは、同じ属性と値を持ち、同じクラスのインスタンスである場合に等しくなります。

http://www.php.net/manual/en/language.oop5.object-comparison.php

例えば:

$address1 = new Address('Main street 42');
$address2 = new Address('Main street 42');

$address1 == $address2;  // true     equal...
$address1 === $address2;  // false   ...but not identical
于 2012-03-23T07:04:36.413 に答える