Re: [RFC][Vote] Typed Properties

From: Date: Wed, 25 May 2016 19:40:28 +0000
Subject: Re: [RFC][Vote] Typed Properties
References: 1 2 3 4 5 6 7 8 9 10 11 12 13 14  Groups: php.internals 
Request: Send a blank email to internals+get-93526@lists.php.net to get a copy of this message
On 5/25/2016 9:13 PM, Niklas Keller wrote: > 2016-05-25 20:39 GMT+02:00 Fleshgrinder <php@fleshgrinder.com>: > >> In my opinion it should simply vanish along with its definition. I mean, >> > > Usually, yes. But suddenly private Type $foo isn't > reliable anymore if > unset is supported for typed properties, because the following would just > remove all type info / enforcement: > > $backup = $this->foo; > unset($this->foo); > $this->foo = $backup; > > Unset can reset it to the default value, but wiping type information is > probably > not an option here. > > Regards, Niklas > I had to check because I never tried this once in my life (why would one need it anyways) ... class A { private $foo = "foo"; function get() { return $this->foo; } function unset() { unset($this->foo); } } $a = new A; echo $a->get(); // foo $a->unset(); echo $a->get(); // Notice: Undefined property: A::$foo $a->foo = "foo"; // Fatal error: Uncaught Error: Cannot access private property A::$foo In other words, unset is not really unset already! QED: Preserving *all* attributes of a property is the only consistent way. However, preserving its value is not. I do not think that there is a problem together with the typed properties, nullability, and unset simply because the property is not explicitly assigned null by unset, it is being undefined. I think internally null is actually assigned and it's not IS_UNDEF, right? However, from a userland perspective it is definitely not defined anymore and access should (as it does) result in an error (in our case E_INFO) plus null is being returned but only because undefined does not exist in PHP userland. I did not read up on all the history yet but I am on it ... -- Richard "Fleshgrinder" Fussenegger

Attachment: [application/pgp-signature] OpenPGP digital signature signature.asc
« previous php.internals (#93526) next »