FAQ
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 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/

Search Discussions

Discussion Posts

Previous

Follow ups

Related Discussions

People

Translate

site design / logo © 2019 Grokbase