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]
> ||
>

Reply via email to