What is an example of a Value Object in PHP?

后端 未结 2 1263
谎友^
谎友^ 2021-02-08 23:24

I have read plenty of C# examples of Value Objects, and I understand that it is an \"object\" that is identified by it\'s values. If a value changes, the object is \"new\".

2条回答
  •  小蘑菇
    小蘑菇 (楼主)
    2021-02-08 23:48

    To put this into context, in many OO languages, objects are compared by their identity. In pseudocode:

    bar = new Foo
    baz = new Foo
    
    bar == baz  // false
    

    Even though both objects are basically the same if you just look at their values, they're not considered to be identical, because they are separate instances. To demonstrate:

    bar = new Foo
    baz = bar
    
    bar == baz  // true
    

    Now:

    In computer science, a value object is a small simple object, like money or a date range, whose equality isn't based on identity.

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

    This would be a demonstration of "value objects":

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

    Because the values are the same, both objects are considered equal, even if they're separate instances.

    PHP does not have a separate concept of "value objects", it only has one type of object. Its comparison operator can make that distinction though:

    When using the comparison operator (==), object variables are compared in a simple manner, namely: Two object instances are equal if they have the same attributes and values, and are instances of the same class.

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

    E.g.:

    $address1 = new Address('Main street 42');
    $address2 = new Address('Main street 42');
    
    $address1 == $address2;  // true     equal...
    $address1 === $address2;  // false   ...but not identical
    

提交回复
热议问题