8

我已经阅读了大量的 C# 值对象示例,并且我知道它是一个由它的值标识的“对象”。如果值更改,则该对象是“新的”。

但是,对于 PHP 而言,这似乎没有任何意义......要么,要么我只是没有建立连接。

值对象只是一个字符串吗?

4

2 回答 2

28

为了把它放到上下文中,在许多 OO 语言中,对象是通过它们的身份进行比较的。在伪代码中:

bar = new Foo
baz = new Foo

bar == baz  // false

即使两个对象基本相同,如果只看它们的,它们也不被认为是相同的,因为它们是单独的实例。展示:

bar = new Foo
baz = bar

bar == baz  // true

现在:

在计算机科学中,值对象是一个小的简单对象,如货币或日期范围,其相等性不基于身份。

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

这将是“价值对象”的演示:

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

address1 == address2  // true

因为值相同,所以两个对象被认为是相等的,即使它们是单独的实例。

PHP 没有单独的“值对象”概念,它只有一种类型的对象。它的比较运算符可以做出这种区分:

使用比较运算符(==)时,对象变量的比较方式很简单,即:如果两个对象实例具有相同的属性和值,并且是同一类的实例,则它们相等。

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 回答
0

PHP 曾经有值对象,但那又回到了 PHP4 中。见http://3v4l.org/ghI8G

于 2014-10-12T08:16:34.793 回答