Что является примером объекта значения в PHP? - PullRequest
7 голосов
/ 23 марта 2012

Я прочитал множество примеров C # объектов-значений и понимаю, что это «объект», который определяется его значениями.Если значение изменяется, объект является «новым».

Однако это не имеет смысла, когда дело доходит до PHP ... либо это, либо я просто не устанавливаю соединение.

Является ли объект значения просто строкой?

Ответы [ 2 ]

25 голосов
/ 23 марта 2012

Чтобы поместить это в контекст, во многих языках ОО объекты сравниваются по их идентичности .В псевдокоде:

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
0 голосов
/ 12 октября 2014

Раньше PHP имел объекты-значения, но это было в PHP4. Смотри http://3v4l.org/ghI8G

...