Hey, thank you both for investing your time :-) Property types are definitely interesting.
> Am 16.03.2016 um 17:36 schrieb Phil Sturgeon <pjsturg...@gmail.com>: > > Hello everyone, > > I have completed the draft for an RFC, to add Typed Properties. The > patch has been written by the one and only Joe Watkins. > > https://wiki.php.net/rfc/typed-properties > > I would really appreciate constructive feedback on this RFC, with a > few areas especially: > > 1. How scared are we that integers can be expanded to floats on runtime? This IMHO is quite necessary, for the same reasons why we even allow int to float widening with strict return types. class foo { float $bar; function __construct(int $x) { assert($x > 0); $this->bar = 10 / $x; } } This is perfectly innocuous, but will fail for values 1, 2, 5 and 10, if we don't allow widening. Depending on the values it might also be not caught in testing. > 2. This whole temporary nullability situation, where unset properties > will error on attempted usage if not set. Should they instead error > after the constructor has been called if they are still not holding a > value? Erroring when using the unset property is the way to go. The example from the RFC is showing exactly why... class Foo { public int $foo; } $foo = new Foo(); echo $foo->foo; // Patch currently errors here With one property, not so much an issue, we could force a constructor. But with 20 properties, definitely an issue. If we'd error after constructor call, there are also other complications… class Foo { public int $bar; function __construct() { global $foo; $foo = $this; } } try { new Foo; } catch (Error $e) {} var_dump($foo->bar); // not set, but instance is referenced Sure, we could find ways to circumvent that and change the class to totally non-functional and making every usage of it throw an Error, but it isn't quite elegant. > 3. Weak vs Strict. Right now this is entirely strict, with no > declare() to change mode. Reasons for this vary, from various sources, > but include "Not sure how to implement it" and "Well people should not > be using properties as part of their public API". > > Help on 3 would be appreciated. Now, if we already have int to float widening (which I recommend), we anyway need to do certain checks. At that point we can just as well add weak typing, because, why not? We do not have an exceptional handling for return types (which are even more subject to be strict-only as it is function-local — properties may be public). And so we shouldn't have either for property types. Thus, my recommendation is to be consistent regarding strict and weak typing regarding argument and return types. > Also let's please avoid "PHP IS TURNING INTO JAVA" and the other > rather common rhetoric. Strict Type Hinting might have been seen as a > battleground for fans of strict and fans of weak to fight through a > keyboard, but this RFC will not be the repeat. > > We'll have a nice, orderly, constructive conversation about this RFC, > and improve the patch as you all provide feedback. > > Let me know what you think folks! Thanks, Bob -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php