I want to add a link here to the Java article about Value Types, this information is quite interesting: http://cr.openjdk.java.net/~jrose/values/values-0.html
Probably, immutable value objects will be soon in Java world according to this information: > Conclusion > > Along with the questions, we believe we have enough answers and insights > to begin prototyping value types, and verifying our thesis. That is, we > think it quite likely that a restricted class-like type can be made to look > enough like a primitive to be worth adding to the language and VM. > 2015-02-02 13:01 GMT+03:00 Rowan Collins <rowan.coll...@gmail.com>: > Lester Caine wrote on 02/02/2015 09:19: > >> This is probably because I still don't understand objects, as I still >> just consider them as arrays with a few more complex elements. I STILL >> work on the basis that is I pass by reference, I can make modifications >> to the data while if I don't I get a copy and have to pass the copy back >> if I need the original changed. This used to be all very simple, so when >> did it stop working? This may explain why I get into trouble with stuff >> that has been working for years but after 'modernising' starts throwing >> problems :( >> > > Since PHP 5, and in most other languages, objects are passed with an extra > level of indirection, almost but not quite the same as pass-by-reference. > So there are actually three ways a variable can be passed (or assigned): > > - scalar by value - an assignment to the variable changes only that > variable > - scalar by reference, using & - both variable names point to the same > variable, and assigning a value to one assigns it to both > - object by value - an assignment to the variable still only changes that > variable, BUT two variables can point at the same object can both modify > its internal state. So if you have $current_user = getCurrentUserObject(); > then saying $current_user = null; is changing its value, so would only > change that variable, but $current_user->setPassword('1234'); is not, so > the change would be visible from all variables pointing at that object. > > Immutable parameters for scalars and arrays are simple: currently you can > use a by-value parameter as a local variable in your function, but you > might want to avoid the confusion of this: function foo( const $bar ) { > $bar = 42; // ERROR } or foo( const array $bar ) { $bar[] = 42; // ERROR } > > Immutable parameters for objects are complicated, because foo( const $bar > ) { $bar->value = 42; } is not technically changing the *value* of that > object, but it would be useful to have an enforcement that it wouldn't > happen. > > Hope that clarifies things a bit. > > Regards, > -- > Rowan Collins > [IMSoP] > || >