我读过很多关于C#值对象的例子,我理解它是一个由其值标识的“对象”。如果值更改,则对象为“新”。
然而,当涉及到PHP时,这似乎并不合理...或者说我没有建立联系。
一个值对象只是一个字符串吗?
为了让这更加容易理解,在许多面向对象语言中,对象是按照它们的身份进行比较的。伪代码如下:
bar = new Foo
baz = new Foo
bar == baz // false
尽管两个对象在值上看起来基本相同,但它们不被认为是相同的,因为它们是不同的实例。为了证明:
bar = new Foo
baz = bar
bar == baz // true
现在:
在计算机科学中,值对象是一个小而简单的对象,比如货币或日期范围,它们的相等性不是基于身份。
这将演示“值对象”:
address1 = new Address('Main street 42')
address2 = new Address('Main street 42')
address1 == address2 // true
因为这两个对象的值相同,即使它们是分开的实例,它们也被认为是相等的。
PHP没有单独的“value objects”概念,它只有一种类型的对象。然而,它的比较运算符可以区分它们:
当使用比较运算符(==)比较对象变量时,它们会以简单的方式进行比较,即:如果两个对象实例具有相同的属性和值,并且是同一个类的实例,则它们相等。
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