To answer my own question: the entire RFC is a no-go in its current state. On 18 March 2016 at 10:09, Marco Pivetta <ocram...@gmail.com> wrote:
> That said, I have a few quite common use-cases that arise and that are a > bit problematic, both because they are hacks and because they are actually > used in large projects. > > Specifically, I'm worried about two particular use-cases: > > * unsetting properties > * by-ref property assignment > > To clarify, un-setting properties allows us to hide properties completely, > loading them on a per-usage basis: > > class Foo { > public int $bar; > public function __construct() { > unset($this->bar); // is this operation legal? For BC compliance, > I'd expect that to be the case > } > public function __get(string $name) > { > initialize_properties_here($this); // external thing connecting to > db, loading files, yadda yadda > } > } > > var_dump((new Foo())->bar); // what happens here? can > `initialize_properties_here` actually assign a non-int to `$bar`? Will the > type safety still work? > See https://3v4l.org/bsHXH/rfc#tabs - unset() doesn't work, and that breaks some basic PHP semantics that are covered by phpt tests, but just for the case of typed properties. > The by-ref property assignment is a bit trickier, but can probably be > worked around with some overhead (re-assigning). > Here's what is going on: > > class Foo { > public int $bar; > public function __construct() { > unset($this->bar); > } > public function __get(string $name) > { > $this->bar = 123; // default value > $props = ['bar' => & $this->bar]; // is this operation now > considered illegal? > initialize_properties_here($props); // external thing connecting > to db, loading files, yadda yadda > } > } > See https://3v4l.org/sKqYb/rfc#tabs - by-ref assignment is forcefully disabled, and that breaks some more PHP semantics just for the case of typed properties. To sum it up, the RFC has one major problem: it focuses on the WHEN assignments happen, rather than just checking WHAT is assigned. I think the scope of the proposal needs to be reduced strictly to type checking. As it stands, this is too magic (and I do qu Cheers, Marco Pivetta http://twitter.com/Ocramius http://ocramius.github.com/