【问题标题】:What is an example of a Value Object in PHP?什么是 PHP 中的值对象的示例?
【发布时间】:2012-03-23 06:06:35
【问题描述】:

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

但是,当涉及到 PHP 时,这似乎没有意义......要么,要么我只是没有建立连接。

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

【问题讨论】:

  • 并非 PHP 中的一切都是对象。
  • 我意识到这一点。我只是想理解一些我一直在阅读的关于值对象的教程。
  • 但不是PHP中的所有东西都是对象,导致比较无效。
  • 如果我正在阅读“语言不可知论”教程,我应该用什么来替换“值对象”这个短语?当有人说 Person 对象有一个 Address Value 对象时——我应该假设在我的世界中它只是转换为 Person 内部的一个属性吗?谢谢:)
  • @Ignacio Vazquez-Abrams:也不是 C# 中的所有内容都是对象,这与这个问题完全无关。

标签: php value-objects


【解决方案1】:

为了说明这一点,在许多 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

【讨论】:

  • 这就是我所需要的。谢谢!
  • @johnnietheblack:请注意,在 C# 中,区别主要取决于比较方法 Equals(),它在 System.Object 上比较身份,但 System.ValueType 覆盖比较内容。
  • 有很多在 PHP 中制作 VO 的存储库。这是我的实现:github.com/sensorario/value-object
【解决方案2】:

PHP 曾经有值对象,但那是在 PHP4 中。见http://3v4l.org/ghI8G

【讨论】:

    猜你喜欢
    • 2016-03-12
    • 2013-12-21
    • 2015-12-13
    • 2012-04-10
    • 2011-01-09
    • 2011-07-16
    • 2010-11-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多