Re: Immutable modifier
| From: | Chris Riley | Date: | Mon, 16 Nov 2015 09:40:08 +0000 |
| Subject: | Re: Immutable modifier | ||
| References: | 1 2 3 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-89227@lists.php.net to get a copy of this message | ||
On 16 November 2015 at 09:33, Lorenzo Fontana <fontanalorenz@gmail.com>
wrote:
> I really like the concept of immutability, but I think that it should be
> applicable at instance level rather than declaration.
>
> I would also prefer another keyword than immutable.
>
> Final does not make the properties immutable, it makes the class not
> extensible.
> On Nov 16, 2015 10:24, "Daniel Persson" <mailto.woden@gmail.com> wrote:
>
>> Any differance from the final keyword?
>>
>> http://php.net/manual/en/language.oop5.final.php
>>
>> On Mon, Nov 16, 2015 at 10:15 AM, Chris Riley <t.carnage@gmail.com>
>> wrote:
>>
>> > Hi,
>> >
>> > There has been a lot of interest recently (eg psr-7) in immutable data.
>> I'm
>> > considering putting an RFC together to add language support for
>> immutables:
>> >
>> > immutable class Foo {
>> > public $bar;
>> > public function __construct($bar) {
>> > $this->bar = $bar;
>> > }
>> > }
>> >
>> > Immutable on a class declaration makes all (maybe only public?)
>> properties
>> > of the class immutable after construct; assigning to a property would
>> > result in a Fatal error.
>> >
>> > class Foo {
>> > public $bar;
>> > immutable public $baz;
>> > }
>> >
>> > Immutable on a property makes the property immutable once it takes on a
>> > none null value. Attempts to modify the property after this results in a
>> > fatal error.
>> >
>> > Any thoughts?
>> > ~C
>> >
>>
>
What instance level syntax would you propose?
$foo = new immutable bar(); ?
or
immutable $foo = new bar();
Gives less flexibility imo and less guarantees of correctness.
Consider the current user land implementation of immutable classes:
class Foo {
private $bar;
public function __construct($bar) {
$this->bar = $bar;
}
public function getBar() {
return $this->bar;
}
}
Is already done at declaration declaration based immutability is probably
more desirable.
What keyword would you suggest other than immutable?
~C