Re: RFC - Array Of for PHP 7
| From: | Andrea Faulds | Date: | Wed, 01 Nov 2017 01:36:40 +0000 |
| Subject: | Re: RFC - Array Of for PHP 7 | ||
| References: | 1 2 3 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-101005@lists.php.net to get a copy of this message | ||
Hi Levi,
Levi Morrison wrote:
My thoughts on the RFC: - The syntaxThank you for bringing this up. The introduction of nullables means that the type[] syntax is problematic and should probably be avoided now. As you say, there is an issue of ambiguity as to whether it would be interpreted as (?int)[] or ?(int[]). Unfortunately, both of these are reasonable interpretations and might be desired. So if we use that syntax, we'd have to add brackets. It would be simpler and prevent any misunderstandings if we use a syntax that is unambiguous in the first place. Personally I might like generics-esque angular brackets, but a problem there is that << and >> are operators with their own tokens, so supporting nested arrays (array<array<array>>) would require some sort of lexer hack.typename[]is a poor. Consider how nullability might bind?int[]. Is that(?int)[]or?(int[])? Here are some variants that do not have this issue:[?int] and ?[int] array<?int> and ?array<int>
- Our current infrastructure requires us to check every element of the array for conformance. While undesirable I believe this can be optimized away in the future if we care enough, and therefore not a show-stopper.Something I've thought about but not gotten round to implementing is a typed array value. That is, you could write
$x = array<int>(1, 2, 3); and $x would contain a typed array that would enforce the types of values added to it. This feels like a cleaner solution, but it introduces a new issue: does an array<int> type declaration require an array<int> value, or will it implicitly cast from vanilla array?
Thanks.
--
Andrea Faulds
https://ajf.me/