2012-03-23 5 views
5

Ho letto molti esempi C# di oggetti valore e capisco che si tratta di un "oggetto" identificato dai suoi valori. Se un valore cambia, l'oggetto è "nuovo".Che cos'è un esempio di oggetto valore in PHP?

Tuttavia, questo non sembra avere senso quando si tratta di PHP ... o quello, o io non sto facendo la connessione.

È un oggetto valore solo una stringa?

+0

Non tutto in PHP è un oggetto. –

+0

Lo capisco. Sto solo cercando di dare un senso ad alcuni tutorial che ho letto che parlano di Value Objects. – johnnietheblack

+0

Ma non tutto in PHP è un oggetto, il che rende il confronto non valido. –

risposta

17

Per mettere questo in contesto, in molte lingue OO, gli oggetti vengono confrontati dall'identità . In pseudocodice:

bar = new Foo 
baz = new Foo 

bar == baz // false 

Anche se entrambi gli oggetti sono fondamentalmente le stesse se si guarda ai loro valori , non sono considerati identici, perché sono istanze separate. Per dimostrare:

bar = new Foo 
baz = bar 

bar == baz // true 

Ora:

In informatica, un oggetto di valore è un piccolo oggetto semplice, come il denaro o di un intervallo di date, di cui l'uguaglianza non è basata su identità.

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

questo sarebbe una dimostrazione di "oggetti di valore":

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

address1 == address2 // true 

Poiché i valori sono gli stessi, entrambi gli oggetti sono considerati uguali, anche se sono istanze separate.

PHP non ha un concetto separato di "oggetti valore", ha solo un tipo di oggetto. L'operatore di confronto può fare questa distinzione:

Quando si utilizza l'operatore di confronto (==), le variabili oggetto vengono confrontate in un modo semplice, vale a dire: Due istanze di oggetto sono uguali se hanno gli stessi attributi e valori, e sono esempi della stessa classe.

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

Es .:

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

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

+1 per una risposta molto ben scritta e informativa – max

+0

QUELLO è quello che mi serviva. Grazie! – johnnietheblack

+0

@johnnietheblack: si noti che in C# la distinzione * anche * si basa principalmente sul metodo di confronto Equals(), che su System.Object si confronta per l'identità, ma che System.ValueType sovrascrive per confrontare il contenuto. –

Problemi correlati