2012-03-23 16 views
5

Przeczytałem wiele przykładów obiektów wartości C# i rozumiem, że jest to "obiekt", który jest identyfikowany przez jego wartości. Jeśli wartość zmieni się, obiekt jest "nowy".Jaki jest przykład obiektu wartości w PHP?

Jednak wydaje się, że to nie ma sensu, jeśli chodzi o PHP ... albo to, albo po prostu nie nawiązuję połączenia.

Czy obiekt wartości jest tylko ciągiem znaków?

+0

Nie wszystko w PHP jest obiektem. –

+0

Zdaję sobie z tego sprawę. Próbuję zrozumieć kilka tutoriali, które czytałem, które mówią o Value Objects. – johnnietheblack

+0

Ale nie wszystko w PHP jest obiektem, co powoduje, że porównanie jest nieważne. –

Odpowiedz

17

Aby umieścić to w kontekście, w wielu językach OO, obiekty są porównywane przez ich tożsamość. W Pseudokod:

bar = new Foo 
baz = new Foo 

bar == baz // false 

Chociaż oba obiekty są w zasadzie takie same, jeśli tylko spojrzeć na ich wartości, nie są one uznawane za identyczne, ponieważ są osobne instancje. Aby wykazać, że:

bar = new Foo 
baz = bar 

bar == baz // true 

Teraz:

W informatyce obiekt wartością jest mały prosty przedmiot, jak pieniądze lub zakresu dat, którego równość nie jest oparty na tożsamości.

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

Byłby to demonstracja „obiekty wartość”:

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

address1 == address2 // true 

ponieważ wartości są takie same, oba obiekty są uznawane za równe, nawet jeśli są one oddzielne instancje.

PHP nie ma osobnej koncepcji "obiektów wartości", ma tylko jeden typ obiektu. Operator porównania może jednak rozróżnić:

Podczas korzystania z operatora porównania (==) zmienne obiektów są porównywane w prosty sposób, a mianowicie: dwie instancje obiektów są równe, jeśli mają te same atrybuty i wartości, i są instancjami tej samej klasy.

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

Np .:

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

$address1 == $address2; // true  equal... 
$address1 === $address2; // false ...but not identical 
+0

+1 za bardzo dobrze napisaną i pouczającą odpowiedź – max

+0

TO jest to, czego potrzebowałem. Dzięki! – johnnietheblack

+0

@johnnietheblack: Zauważ, że w języku C# rozróżnienie * również * zależy głównie od metody porównania Equals(), która w System.Object porównuje tożsamość, ale która System.ValueType przesłania by porównać zawartość. –

Powiązane problemy